基于其他行存在的条件数据帧变量

时间:2018-11-16 15:07:58

标签: r dataframe conditional

我有一个数据框,例如:

[remoteOperations]="true"

我要分配第三个变量newvar,如下所示:

df <- data.frame(Group = c('a', 'a', 'b', 'a', 'b', 'b', 'a', 'b'),
                 ID = c(paste0('x', c('1', '2', '2', '3', '4', '5', '6', '6')))

对于每个ID,它可能会出现一次或两次。如果它出现在组a中,则包含a的行将被分配为“第一”。如果出现,并且组a和b出现,则将a分配为“第一个”,将b分配为“第二个”。如果仅出现在b中而不出现在a中,则将newvar分配为“ first”。我该如何编写将newvar这样分配的代码?

1 个答案:

答案 0 :(得分:1)

使用data.table的解决方案如何:

library(data.table)
setDT(df)
df[, newvar := c('first', 'second')[seq_len(.N)], by = .(ID)]
df
   Group ID newvar
1:     a x1  first
2:     a x2  first
3:     b x2 second
4:     a x3  first
5:     b x4  first
6:     b x5  first
7:     a x6  first
8:     b x6 second