2017-05-02 54 views
1

我有表示從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 

第一步是檢測有這個問題的採購訂單。我對此有以下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

這樣嗎? 'dt [,Rating:= max(Rating,na.rm = TRUE),by = PO]' – din

+1

是的,它運作良好。請給出答案,我會標記它。非常感謝 – user3701522

+1

請注意:'data.table'對'length(unique ...':'uniqueN')有自己的(優化的)函數。 – Jaap

回答

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

我們也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 
+1

謝謝。 – user3701522