汇总记录,每列的最大值,按R分组
这看起来相当简单,我有一个解决方案,但由于我有很多专栏,这相当耗时。我看过其他的解决方案,但总是有一些稍微不同的方法聚合一个列,变异所有列等。在SQL中,我会按PAT_ID从table_name group中选择PAT_ID、maxX、maxY、maxZ 我有一个数据集,看起来像这样,但有更多的列:汇总记录,每列的最大值,按R分组,r,group-by,max,R,Group By,Max,这看起来相当简单,我有一个解决方案,但由于我有很多专栏,这相当耗时。我看过其他的解决方案,但总是有一些稍微不同的方法聚合一个列,变异所有列等。在SQL中,我会按PAT_ID从table_name group中选择PAT_ID、maxX、maxY、maxZ 我有一个数据集,看起来像这样,但有更多的列: dt <- data.frame( PAT_ID = c('P','P','P','A','A','A'), X = c(1,NA,NA, 1,NA,NA), Y = c(NA,2
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)
我的输出是汇总记录,它是每个PAT_ID的每列的最大值:
myresult <- data.frame(
PAT_ID = c('P','A'),
X = c(1,1),
Y = c(2,1),
Z = c(1,0)
)
我相信有更好的方法可以做到这一点,但如何做到呢?这可以通过一个全在dplyr中的摘要来实现。给你
library(dplyr)
dt %>% group_by(PAT_ID) %>% summarize_all(max, na.rm=T)
# PAT_ID X Y Z
# <fctr> <dbl> <dbl> <dbl>
# 1 A 1 1 0
# 2 P 1 2 1
这也可以通过使用骨料的基本R来实现
总结每一个例子,na.rm=TRUE。。。谢谢我没有意识到每个汇总都不适用于分组变量。只需注意对syntax@soporific请注意?Summary_each帮助页面上的消息:将来,mutate_each和Summary_each将被弃用,取而代之的是更具特色的函数系列:mutate_all、mutate_at、mutate_if、Summary_all、Summary_at和Summary_if。这就是为什么我把你们都用在这里。哦,谢谢!我必须重新安装dplyr并重新启动会话才能获得这些FN。新功能!:
aggregate(dt[c("X","Y","Z")], dt["PAT_ID"], FUN=max, na.rm=TRUE)
PAT_ID X Y Z
1 A 1 1 0
2 P 1 2 1