根据价值量分配类别

时间:2018-06-12 17:16:33

标签: r data.table

我有像这样的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')) 

由于列"得分"中的值如果是随机的,则应根据分配给每个人的数字的大小来分配类别。非常感谢任何帮助。

2 个答案:

答案 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