2015-05-05 43 views
5

我有一個數據框,並且希望輸出結果如所示。相反,我在中間獲得了NA輸出。有沒有辦法使用dplyr來做我想要的?R dplyr根據fun的索引(另一列)彙總一個列值

x <- c(1234, 1234, 1234, 5678, 5678) 
y <- c(95138, 30004, 90038, 01294, 15914) 
z <- c('2014-01-20', '2014-10-30', '2015-04-12', '2010-2-28', '2015-01-01') 
df <- data.frame(x, y, z) 
df$z <- as.Date(df$z) 
df %>% group_by(x) %>% summarise(y = y[max(z)]) 

What I get: 
    x y 
1 1234 NA 
2 5678 NA 

Desired Output: 
    x  y 
1 1234 90038 
2 5678 15914 

回答

7

你可以嘗試which.max來獲取可用於子集劃分的「Y」元素max值的數字指標。使用max只是給出了最大值z

df %>% 
    group_by(x) %>% 
    summarise(y= y[which.max(z)]) 
#  x  y 
#1 1234 90038 
#2 5678 15914 
+0

接受此作爲答案,因爲它提供了所需的輸出。 – Gopala

+0

@ user3949008如果你需要整行,你也可以用'slice(which.max(z))'代替'summarise' – akrun

3

使用filterdplyrmax

df%>%group_by(x)%>%filter(z==max(z)) 
+0

但是這也會得到根據預期結果不需要的'z'列 – akrun

+0

這很有趣。我錯誤地認爲group_by總是需要跟着總結。獲取z列然後通過另一個管道操作選擇是否更有效?或者,像上面那樣使用which.max? – Gopala

相關問題