假設我有一個數據幀,像這樣:對於每個組找到若干列的最大值觀測
set.seed(4)
df<-data.frame(
group = rep(1:10, each=3),
id = rep(sample(1:3), 10),
x = sample(c(rep(0, 15), runif(15))),
y = sample(c(rep(0, 15), runif(15))),
z = sample(c(rep(0, 15), runif(15)))
)
如上所見,的x
,y
,z
矢量取零值的一些元素,其餘從0和1
之間的均勻分佈對於每個組,通過第一列確定的,我想找到從第二塔三個ID,指向x
,y
,z
變量在最高值被繪製組。假設除了在給定組的所有觀察值中變量值爲0的情況外,沒有繪製 - 在這種情況下,我不想將任何數字作爲具有最大值的行的標識返回。
輸出看起來像這樣:
group x y z
1 2 2 1
2 2 3 1
... .........
我首先想到的是,爲每個變量分別選擇具有最高值的行,然後用merge
把它放在一個表。但是,我想知道是否可以在沒有merge
的情況下完成,例如使用標準dplyr
功能。
隨着'data.table'你可以嘗試'setDT(DF)[,lapply(.SD,函數(x)的ID [which.max(X)]),由=基團,.SDcols = C (「x」,「y」,「z」)]' – nicola
當使用'sample'和'runif'等函數時,請使用'set.seed'。你可以試試'library(dplyr); df%>%group_by(group)%>%summarise_at(vars(-id),funs(which.max))' – Sotos
確實預期輸出中的第一行'1 5 2 4'表示組1具有最高的id值5列在X列,對於列Y中的id2和列z中的id 4?如果是,那麼你是否期待只有2行輸出?那麼爲什麼在預期輸出中延續點? – Aramis7d