我有像这样的data.table
dt1=data.table(id=c(001,001,002,002,003,003),
score=c(4,6,3,7,2,8))
每个人在变量"得分"上有2个分数。 我想根据他们的分数将每个人分配到变量结果中的一个类别。
对于他们较低的分数,他们得到了一个" A",对于他们的更高,他们得到了一个" B"。所以决赛桌看起来像这样
dt2=data.table(id=c(001,001,002,002,003,003),
score=c(4,6,3,7,2,8),
category=c('A','B', 'A','B', 'A','B'))
由于列"得分"中的值如果是随机的,则应根据分配给每个人的数字的大小来分配类别。非常感谢任何帮助。
答案 0 :(得分:2)
我们order
可以i
'得分',按'id'分组,并将'类别'指定为'A','B'
library(data.table)
dt1[order(score), category := c('A', 'B') , by = id]
dt1
# id score category
#1: 001 4 A
#2: 001 6 B
#3: 002 3 A
#4: 002 7 B
#5: 003 2 A
#6: 003 8 B
或另一种选择是将逻辑向量转换为数字索引,并根据该
替换值dt1[, category := c('A', 'B')[(score != min(score)) + 1] ,by = id]
dt1 <- data.table(id=c('001','001','002','002','003','003'),
score=c(4,6,3,7,2,8))
答案 1 :(得分:1)
我们可以使用ifelse
:
library(data.table)
dt1[, category := ifelse(score == min(score), 'A', 'B'), by = id]
<强>结果:强>
id score category
1: 1 4 A
2: 1 6 B
3: 2 3 A
4: 2 7 B
5: 3 2 A
6: 3 8 B