这看起来相当简单,我有一个解决方案,但是由于我有很多列,所以这有点费时。我已经看过其他的解决方案,但总是有些不同的地方(聚合一列,改变所有列等)。在SQL中,我会做select PAT_ID, max(X), max(Y), max(Z) from table_name group by PAT_ID
。总结记录,每列最大值,group_by R
我有一个数据集,看起来像这样(但更多的列):
dt <- data.frame(
PAT_ID = c('P','P','P','A','A','A'),
X = c(1,NA,NA, 1,NA,NA),
Y = c(NA,2,NA,NA,1,NA),
Z = c(NA,NA,1,NA,NA,0)
)
所以我总结,然后合并结果:
results_X <-dt %>%
group_by(PAT_ID) %>%
summarise(X = max(X, na.rm=TRUE))
results_Y <-dt %>%
group_by(PAT_ID) %>%
summarise(Y = max(Y, na.rm=TRUE))
results_Z <-dt %>%
group_by(PAT_ID) %>%
summarise(Z = max(Z, na.rm=TRUE))
resulted <- left_join(results_X, results_Y)
resulted <- left_join(resulted, results_Z)
我的输出是“卷子up“记录,即每个PAT_ID每列的最大值:
myresult <- data.frame(
PAT_ID = c('P','A'),
X = c(1,1),
Y = c(2,1),
Z = c(1,0)
)
我确定有更好的方法来做到这一点,但是如何?
summarise_each(funs(max(。,na.rm = TRUE)))...谢谢!我没有意识到summarise_each不适用于变量组。只需注意语法的小编辑 – soporific
@soporific请注意'?summarise_each'帮助页面上的消息:“将来mutate_each()和summarise_each()将被弃用,以支持更多功能的函数系列:mutate_all() ,mutate_at(),mutate_if(),summarise_all(),summarise_at()和summarise_if()。“这就是为什么我在这里使用'summarize_all()'。 – MrFlick
哦,谢谢!我必须重新安装dplyr并重新启动会话才能获得这些fns。新功能! :) – soporific