基于其他行存在的条件数据框变量
Conditional data frame variable based on presence on other row
我有一个像这样的数据框:
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')))
我想分配第三个变量 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'))),
newvar = c('first', 'first', 'second', 'first', 'first', 'first', 'first', 'second'))
对于每个 ID,它可能出现一次或两次。如果它出现在a组中,则包含a的行将被分配'first'。如果出现了A组和b组,那么a会被赋值'first',b会被赋值'second'。如果它只出现在 b 而没有出现在 a 中,则 newvar 将被分配 'first'。如何编写代码来分配 newvar?
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
我有一个像这样的数据框:
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')))
我想分配第三个变量 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'))),
newvar = c('first', 'first', 'second', 'first', 'first', 'first', 'first', 'second'))
对于每个 ID,它可能出现一次或两次。如果它出现在a组中,则包含a的行将被分配'first'。如果出现了A组和b组,那么a会被赋值'first',b会被赋值'second'。如果它只出现在 b 而没有出现在 a 中,则 newvar 将被分配 'first'。如何编写代码来分配 newvar?
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