我有一些杂乱的数据代表了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?
中执行此操作答案 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