【问题标题】:dplyr - inputting columns to rowwise() with column index instead of column namedplyr - 使用列索引而不是列名将列输入到 rowwise()
【发布时间】:2020-01-29 05:54:13
【问题描述】:

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

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

有更快的解决方案吗?

【问题讨论】:

  • 为什么不rowMeans(data[-1])
  • @RonakShah 你刚刚打败了我。如果它是除id 之外的所有列的简单平均值,那么他的解决方案可以按原样使用。否则,您可以传递列号向量。
  • @chinsoon12 我想,当然,这对于一般知识来说会很好,但我更喜欢在 tidyverse 中使用的方法。例如,我当然可以仅使用 rowmeans 循环来计算答案。我更大的问题与其说是获取行本身的含义——这只是导致我提出这个更大问题的特定示例——不如说是关于在 tidyverse 中使用 rowwise() 函数索引列的有效方法。
  • 我不知道在处理rowwise数据时会使用“高效”;它确实有效,但是虽然某些计算肯定需要它,但一般来说,你正在击败 R 一次对整个向量进行计算的效率。我了解您正在使用rowMeans 作为一种了解如何以这种方式处理数据的方法,但是......也许您的真正 问题也可能不需要rowwise

标签: r dplyr tidyverse


【解决方案1】:

你可以这样做:

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

【讨论】:

    【解决方案2】:

    对我来说,使用rowMeans 似乎很简单,不涉及tidyverse 函数。

    data$c <- rowMeans(data[2:3])
    

    但是,如果您更喜欢 tidyverse 解决方案,我们可以从 purrr map 函数中获得一些帮助。

    library(dplyr)
    library(purrr)
    

    只有两列

    data %>% mutate(c = map2_dbl(a, b, ~mean(c(.x, .y))))
    

    对于许多列

    data %>%  mutate(c = pmap_dbl(select(., a:b), ~mean(c(...))))
    

    【讨论】:

      猜你喜欢
      • 2015-12-13
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 2018-03-05
      • 2013-04-17
      • 2018-03-08
      相关资源
      最近更新 更多