r - dplyr - 使用列索引而不是列名称将列输入到 rowwise()

标签 r dplyr tidyverse

我找到了一个很好的解决方案来解决我遇到的问题,我想创建一个新列来计算此处相应行中所有单元格的平均值:

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 线程中发现了类似的内容 here ,但该解决方案有其自身的问题,因为我们列出了所有列索引而不是列名称。我的列太多了,无法为每个计算列出所有列。

有什么解决办法吗?

编辑:我自己想出了一个办法,但我觉得它太不优雅了,我相信我可能会为每一行提取整个列,这显然是一个比预计:

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(.))))

关于r - dplyr - 使用列索引而不是列名称将列输入到 rowwise(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59961212/

相关文章:

r - 相当于 rowwise() do() 和 purrr,现在 by_row() 已被弃用?

R:基于分类变量 *of 列表 * 创建虚拟变量

r - 在substitute() 表达式中添加换行符

r - 连接多个数据框时使用数据框名称作为后缀

r - 在同一图中绘制多个 corrplots (R)

r - 循环计算权重并创建新变量

r - 没有值列时的 pivot_wider

r - 涉及行特定和整组元素的组特定计算

string - 获取 R 中因子中最常见的元素

r - 如何在不引起无限递归调用的情况下动态修改函数?