我有一个 Dataframe 患者A
Height Weight Age BMI
<dbl> <dbl> <dbl> <dbl>
1 161 72.2 27 27.9
2 164 61.0 21 22.8
3 171 72.0 30 24.6
4 169. 63.9 25 22.9
5 174. 64.4 27 21.1
6 160 50.9 22 19.9
7 172 77.5 22 26.3
8 165 54.5 22 20
9 173 82.4 29 27.5
10 169 76.6 22 26.9
我想得到每列的一些统计数据。我有下一个工作代码,它只处理分位数
genStat <- PatientsA %>%
summarise_all(funs(list(quantile(., probs = c(0.25, 0.5, 0.75))))) %>%
unnest %>%
transpose %>%
setNames(., c('25%', '50%', '75%')) %>%
map_df(unlist) %>%
bind_cols(data.frame(vars = names(PatientsA)), .)
我需要加上平均值和标准差来总结所有这些
genStat <- PatientsA %>%
summarise_all(funs(mean,sd,list(quantile(., probs = c(0.25, 0.5, 0.75))))) %>%
unnest %>%
transpose %>%
setNames(., c('mean','sd','25%', '50%', '75%')) %>%
map_df(unlist) %>%
bind_cols(data.frame(vars = names(PatientsA)), .)
这种直接的方法无法返回下一个错误:
名称错误(对象)〈- nm:“names”属性[5]必须与向量[3]长度相同
我是R的新手,那么完成这个任务的正确语法是什么呢?
3条答案
按热度按时间z9ju0rcb1#
这就是我要建议的。代码中有一点重复(调用
quantile
三次),但总体来说我认为它更容易理解和调试。nlejzf6q2#
我们还可以将
quantile
输出放入list
,然后放入unnest
或者使用
pivot_longer
数据
brccelvz3#
从
dplyr
1.1.0开始,用户还可以使用reframe()
结合pivot_[longer|wider]
和group_by
的更具编程性的解决方案:它帮助我动态地添加
probs = 0:100/100
,这比把所有东西都写出来要容易得多。