R 中的 SAS 数组等效项

2024-01-11

我有一个包含以下列的数据集:

    ID  Measure1    Measure2    XO  X1  x2  x3  x4  x5
    1   30  2   item1   item1   item23  NA      item6   item9
    2   23  2   item1   item323 item1   item4   item5   NA      
    3   2   2   item1   item78  item3   NA      item1   item5

我想用 R 中的这段 SAS 代码创建一个标志变量:

 data dt2;
 set dt1;
 array x {5} x1 - x5;
 do i=1 to 5;
 if x0=x{i} then do; 
 flag=i;
 leave;
 end;
 end;
 drop i;
 run;

目标是能够浏览 x1-x5 的值并查看 xo 等于其中任何一个的位置并返回位置,例如,如果在 x1 处找到 item1,则如果在位置 x3 中找到则返回值 1 3.

最终产品看起来像这样:

    ID  Measure1    Measure2    XO  X1  x2  x3  x4  x5  Flag
    1   30  2   item1   item1   item23  NA          item6   item9   1
    2   23  2   item1   item323 item1   item4       item5   NA      2
    3   2   2   item1   item78  item3   NA          item1   item5   4

请记住,可能存在 x1-x5 的所有行都包含 NA 的情况,在这种情况下我想返回空白,这可能吗?

我无法在 R 中找到动态意义上的等效内容(无需使用 sqldf 编写多个 if 语句或 case when),因为现在列可能是 5,但将来可能会更改为最多 20。

有任何想法吗?


我们可以用max.col

df1$Flag <- max.col(df1$XO[row(df1[-1])]==df1[-1], 'first')
df1
#    XO      X1     x2     x3    x4    x5 Flag
#1 item1   item1 item23  item5 item6 item9    1
#2 item1 item323  item1  item4 item5 itm87    2
#3 item1  item78  item3 item98 item1 item5    4

Update

基于更新的数据集,我们可以将逻辑矩阵中的 NA 元素替换为FALSE然后使用max.col。如果一行中没有 TRUE 值,我们可以将其设置为NA通过得到rowSums,检查是否为0,将0改为NA(NA^..)并乘以max.col(..

df3 <- df2[5:ncol(df2)]
i1 <- df2$XO[row(df3)]==df3
i2 <- replace(i1, is.na(i1), FALSE)
df2$Flag <- max.col(i2, 'first') * NA^(rowSums(i2)==0)
df2
#  ID Measure1 Measure2    XO      X1     x2    x3    x4    x5 Flag
#1  1       30        2 item1   item1 item23  <NA> item6 item9    1
#2  2       23        2 item1 item323  item1 item4 item5  <NA>    2
#3  3        2        2 item1  item78  item3  <NA> item1 item5    4
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R 中的 SAS 数组等效项 的相关文章

随机推荐

  • 如何安装相关的 C++ 库以避免链接器命令失败?

    我最近尝试编译一个C 程序 但发现它给出了这个错误 Undefined symbols for architecture x86 64 std 1 locale use facet std 1 locale id const referen
  • Hibernate 左外连接

    我有这样的 Hibernate 服务方法 SELECT sc FROM SecurityContact sc WHERE sc securityId securityId2 securityId2由用户传入 每个 SecurityConta
  • C#读取ini文件

    我正在尝试读取具有以下格式的 ini 文件 SETTING VALUE SETTING2 VALUE2 我目前有以下代码 string cache sr ReadToEnd string splitCache cache Split new
  • 根据 WooCommerce 中的总支出,每位用户仅自动应用优惠券一次

    我想根据客户总消费金额自动应用优惠券 此优惠券仅需客户使用一次 这是我到目前为止所尝试过的 但我得到了一个空白屏幕 add action woocommerce before calculate totals loyalty order d
  • 如何在 Bash 中间接获取关联数组的键和值?

    在 Bash 中 仅给定一个包含关联数组名称的变量 declare A dict abc 125 def 456 dictvar dict 我们如何检索关联数组的键和值 在 Bash 中 通过间接获取关联数组的键 给定变量中的数组名称dic
  • 如何使表格的重复线性渐变在多个单元格上无缝延续?

    我遇到麻烦了重复线性渐变与桌子 基本上 我无法让它在表格上看起来很漂亮 尤其是在 Chrome 上 即使我将上述规则应用于tr元素 看起来像td元素继承它 而不是具有连续的条纹 而是 锯齿状 的条纹 条纹不会在单元格边框上继续 stripe
  • 共享连接字符串

    我正在开发一个类库 C 我将把它用于我的不同项目 稍后 我的类库 dll 将使用项目的连接字符串 数据上下文 它将引用我的新 dll 我该怎么做 假设我有一个名为 CLP 的类库项目和一个网站项目 WP 我可以添加对 CLP dll 文件的
  • Android 应用程序中的 HTML 到 PDF 转换

    是否可以使用将 html 转换为 pdfjsPdf在 Android 应用程序中 不使用 cordova 或手机间隙 并将文件保存在设备本地 我尝试了这个 单击按钮我调用 jspdf 转换逻辑 但 pdf 没有生成 在 adb 日志中 我在
  • delphi中如何获取当前用户的用户名?

    你好 我在 Windows 8 中使用 delphi FM2 和 XE3 我遇到的问题是我希望用户按下一个按钮 然后导航到位于 appdata ex 中的子文件夹 C Users Kobus AppData Roaming minecraf
  • 有没有办法在 Eclipse 中查找/替换整个项目?

    我正在尝试查找并替换 Eclipse 项目中的许多文件 但我似乎找不到方法来做到这一点 谷歌搜索显示有一些插件可以完成此任务 但是 Eclipse 中有内置功能吗 这似乎是一项非常基本的任务 令我惊讶的是我找不到方法来完成它 Search
  • 更新 Symfony 4 中的实体?

    我的问题很简单 但我找不到一个好的答案 我有一个由命令行创建的实体 php bin console make 实体 该实体是具有很少属性的用户 名称 电子邮件 密码 插入字段后 我进行了迁移 因此我的表已使用这些命令行在数据库中创建 php
  • UnityContainer 和内部构造函数

    我有一个带有内部构造函数的类 想要从 Unity 2 0 中解析它 public class MyClass internal MyClass IService service 然后我在做 container Resolve
  • 如何使用 webpack 2 在字符串模式下使用 CSS Loader 删除所有注释?

    我将此配置用于我的 webpack 2 test css i use ExtractTextPlugin extract use css loader minimize 如何删除基于字符串模式的所有注释 我用这个但是不起作用 css loa
  • 无法解析字符串值中的占位符

    我正在尝试使用来自 properties文件 但似乎不起作用 这是我的代码 Service ServiceFTP Transactional public class ServiceFTPImpl implements ServiceFTP
  • Java 8 JIT线程似乎陷入了无限循环

    我用 Java 8 编写了一个服务器应用程序 并使用 java 1 8 0u25 运行它 前几个小时工作正常 但在收到大约 5k 10k 请求后 VM 进程的一个线程使用了其中一个 CPU 的 100 所以我尝试了jstack让VM进程检查
  • eclipse中有切换面板的快捷方式吗?

    Eclipse具有MDI结构 多文档界面 因此搜索面板 包资源管理器和代码编辑器都可以在一个窗口中打开 但我还没有找到在这些面板之间切换的键盘快捷键 例如 在搜索代码库后 我希望有一个快速快捷方式返回代码编辑器 If I understan
  • 如何通过 d3 使用 JSON 数组

    我是 d3 和 json 的新手 我正在尝试构建水平甘特图 早些时候 我使用存储在 var 数据集中的内联数组实现了相同的效果 但现在我已经用 json object array 替换了数组 process process name 1 s
  • 与 MS Teams 的 GCP 监控警报通知通道(Web Hook)

    我正在尝试在 GCP 监控通知通道中使用 Teams webhook Webhook URL 是通过查看下面的指南创建的 https learn microsoft com en us outlook actionable messages
  • Angular4 - npm jQuery 错误 TS1005:“,”预期

    我的项目一直没问题 直到我通过以下方式安装了 jquery 包 npm install jquery and npm install D types jquery 之后我遇到了一些错误 并决定通过索引文件中的脚本标签使用 jQuery 因此
  • R 中的 SAS 数组等效项

    我有一个包含以下列的数据集 ID Measure1 Measure2 XO X1 x2 x3 x4 x5 1 30 2 item1 item1 item23 NA item6 item9 2 23 2 item1 item323 item1