【发布时间】:2021-10-01 04:19:25
【问题描述】:
我正在使用 dplyr 和 Hmisc 按照下面的 R 代码按组准备加权统计数据表。
require(Hmisc) # weighted statistcs
StTbl <- iris %>%
group_by(Species) %>% # Group species
summarise(n = n(), # number of records
WtMn = wtd.mean(Sepal.Length, Petal.Width), # weighted mean
WtSd = sqrt(wtd.var(Sepal.Length, Petal.Width)), # weighted SD
WtCV = WtMn/WtSd, # weighted CV
Minm = min(Sepal.Length), # minumum
Wp05 = wtd.quantile(Sepal.Length, Petal.Width , 0.05), # p05
Wp50 = wtd.quantile(Sepal.Length, Petal.Width , 0.50), # p50
Wp95 = wtd.quantile(Sepal.Length, Petal.Width , 0.95), # p95
Wp975 = wtd.quantile(Sepal.Length, Petal.Width , 0.975), # p975
Wp99 = wtd.quantile(Sepal.Length, Petal.Width , 0.99), # p99
Maxm = max(Sepal.Length) # maximum
)
StTbl
A tibble: 3 x 12
Species n WtMn WtSd WtCV Minm Wp05 Wp50 Wp95 Wp975 Wp99 Maxm
<fct> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 setosa 50 5.05 0.356 14.2 4.3 4.61 5.06 5.62 5.70 5.72 5.8
2 versicolor 50 5.98 0.508 11.8 4.9 5.13 6 6.80 6.97 7 7
3 virginica 50 6.61 0.626 10.6 4.9 5.8 6.5 7.7 7.7 7.9 7.9
现在,我希望使用列索引,而不是使用表的列名,这样我就可以循环遍历许多列,为每列准备统计表。我发现有很多关于如何在 StackOverflow 上执行此操作的建议,包括:
- double square 或使用表名和索引号的单括号,例如在上面的代码中用“.[1]”或“iris1”代替“Sepal.Length”——这些建议运行没有错误,但返回 NA 结果
- 使用 get 函数,例如“get(iris1)” - 此建议返回无效的第一个参数错误
- dplyr does not really support column index 和列索引的建议是一个坏主意,我应该以另一种方式解决问题 - 我不确定这会是另一种“tidyverse”方式吗?
- 写一个custom function - 我不知道从哪里开始我的例子
【问题讨论】: