这看起来相当简单,我有一个解决方案,但由于我有很多专栏,所以有点费时。我已经看过其他解决方案了,但它总是有一些不同的东西(聚合一列,改变所有列等)。在SQL中我会做select PAT_ID, max(X), max(Y), max(Z) from table_name group by PAT_ID
。
我有一个看起来像这样的数据集(但有更多列):
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)
我的输出是&#34;汇总&#34;记录,即每个PAT_ID的每列的最大值:
myresult <- data.frame(
PAT_ID = c('P','A'),
X = c(1,1),
Y = c(2,1),
Z = c(1,0)
)
我确定有更好的方法可以做到这一点,但是怎么做?
答案 0 :(得分:1)
可以使用summarize_all
中的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
答案 1 :(得分:1)
这也可以使用webpack --watch
基础R来完成。
aggregate