r - dplyr - 使用列索引而不是列名将列输入到 rowwise()
问题描述
我找到了一个很好的解决方案来解决我遇到的问题,我想在此处创建一个新列来计算相应行中所有单元格的平均值:
https://stackoverflow.com/a/33438918/12744116
诚然,数据并不整洁,但我在下面复制的解决方案可以完成工作:
data %>%
rowwise() %>%
mutate(c=mean(c(a,b)))
# id a b c
# (dbl) (dbl) (dbl) (dbl)
# 1 101 1 2 1.5
# 2 102 2 2 2.0
# 3 103 3 2 2.5
但是,与这个更简单的示例不同,我要命名的列太多了。我想知道是否有任何方法可以使用切片表示法快速引用列(即,而不是 c(a, b),类似于 2:3)或通过索引引用列的其他方式。
我在这里的另一个 Stack Overflow 线程上发现了类似的东西,但该解决方案有其自身的问题,因为我们列出了所有列索引而不是列名。我的列太多了,无法为每个计算列出所有列。
有什么解决办法吗?
编辑:我自己想出了一个,但我觉得它太不雅了,我相信我可能会为每一行提取整个列,这显然是一个比预期慢的解决方案:
data %>%
mutate(id = row_number()) %>%
rowwise() %>%
mutate(avg = mean(c(.[id, 2:4], recursive=TRUE)))
有更快的解决方案吗?
解决方案
你可以做:
df %>%
mutate(c = rowMeans(select(., 2:3)))
id a b c
1 101 1 2 1.5
2 102 2 2 2.0
3 103 3 2 2.5
或者:
df %>%
mutate(c = rowMeans(select(., 2:length(.))))
推荐阅读
- apache-kafka-streams - num.stream.threads 创建空闲线程
- docker - Docker:使用不安全的注册表而不修改 daemon.json
- python - 如果我的脚本包含来自 .py 模块的导入,Pyinstaller 不会生成 .exe 文件
- google-sheets - 将重复的数字复制到另一个单元格或谷歌表
- linux - dos2unix 覆盖原始文件所有者名称
- javascript - 如何在 Redux 中使用渲染解决这个问题?
- java - 使用 GridBagLayout 添加 JTextField 时,Swing 组件不会显示
- c++ - 获取变体的值,它本身可能是另一个变体
- microsoft-graph-api - 用于访问 SharePoint 网站导航的 Microsoft Graph API
- javascript - 从对象中提取名称与测试匹配的属性