数据表争论

时间:2017-05-02 05:08:15

标签: r

我有一些杂乱的数据代表了PO创建过程的反馈

PO <- c(1, 1, 2, 2, 3, 4, 5, 6)
Rating <- c(3, 0, 0, 1, 3, 4, 5, 4)
dt <- data.table(PO, Rating)

> dt
   PO Rating
1:  1      3
2:  1      0
3:  2      0
4:  2      1
5:  3      3
6:  4      4
7:  5      5
8:  6      4

PO#1有两个等级3和0,PO#2等级为0和1.在所有这些情况下,我想将行更改为该PO的最大值

   PO Rating
1:  1      3
2:  1      3 <- changed from 0
3:  2      1 <- changed from 0
4:  2      1
5:  3      3
6:  4      4
7:  5      5
8:  6      4

第一步是检测出有此问题的PO。我有以下R代码:

t <- dt[, .(U=length(unique(Rating))), by=.(PO)]

> t
   PO U
1:  1 2
2:  2 2
3:  3 1
4:  4 1
5:  5 1
6:  6 1

这表明PO#1和#2有两个独特的评级。现在,我的任务是找到这些唯一评级的最大值,并将它们分配回数据表dt。

我如何在R?

中执行此操作

2 个答案:

答案 0 :(得分:2)

使用data.table函数:

# subset by PO, then find the max Rating in each group, and reassign
# that max value to the Rating
dt[ , Rating := max(Rating, na.rm = TRUE), by = PO]

干杯!

答案 1 :(得分:1)

我们也可以order然后分配第一个元素

dt[order(PO, -Rating), Rating := Rating[1], PO]
dt
#   PO Rating
#1:  1      3
#2:  1      3
#3:  2      1
#4:  2      1
#5:  3      3
#6:  4      4
#7:  5      5
#8:  6      4