让我们考虑一下这个简单的数据集
set.seed(12345)
df <- data.frame(a1 = rnorm(5), a2 = rnorm(5), a3 = rnorm(5),
b1 = rnorm(5), b2 = rnorm(5), b3 = rnorm(5),
c1 = rnorm(5), c2 = rnorm(5), c3 = rnorm(5))
看起来像是
a1 a2 a3 b1 b2 b3 c1 c2 c3
1 0.5855288 -1.8179560 -0.1162478 0.8168998 0.7796219 1.8050975 0.8118732 0.49118828 1.1285108
2 0.7094660 0.6300986 1.8173120 -0.8863575 1.4557851 -0.4816474 2.1968335 -0.32408658 -2.3803581
3 -0.1093033 -0.2761841 0.3706279 -0.3315776 -0.6443284 0.6203798 2.0491903 -1.66205024 -1.0602656
4 -0.4534972 -0.2841597 0.5202165 1.1207127 -1.5531374 0.6121235 1.6324456 1.76773385 0.9371405
5 0.6058875 -0.9193220 -0.7505320 0.2987237 -1.5977095 -0.1623110 0.2542712 0.02580105 0.8544517
现在,我想得到以一个特定字母开头的列的平均值,在一个向量中指定。
比如说如果我有
cols <- c("a", "c")
我想输出一个 Dataframe ,其中两列(a和c)分别包含a1/a2/a3和c1/c2/c3列的平均值。
a c
1 -0.449558319 0.8105241
2 1.052292204 -0.1692037
3 -0.004953185 -0.2243752
4 -0.072480153 1.4457733
5 -0.354655514 0.3781747
我一直在尝试使用starts_with
和row_wise
,但我不能完全得到正确的语法。
5条答案
按热度按时间ubby3x7f1#
select
列starts_with
a或c,然后使用split.default
拆分列,并对每个组应用rowMeans
:请注意,根据列名的结构,可能需要更改
gsub
部分。x9ybnkn62#
计算所有列组的 * 平均值 *,然后计算子集:
根据实际数据,获取均值然后获取子集可能更有效。
**编辑:**对于较大的数据,先子集化再取平均值的速度更快。
2eafrhcq3#
您可以在
mutate()
调用中迭代选择器值:wydwbb8l4#
基准测试
数据:
基准:
pqwbnv8z5#