提问者:小点点

在哪里可以找到有关dplyr::行限制的信息?


我不想在mutate调用中显式说明列名,而是想从其他地方生成的名称列表中动态地这样做。我尝试了以下思路:

df <- data.frame(x=1:10, y=21:30) 
l <- c('x', 'y')
get_from_df <- function(x) { get(pos=df,x) }
df %>% rowwise %>% mutate(presum=do.call(sum, map(l, get_from_df)))

它给出了整个data. frame 310的总和,而不是行总和。输出是:

df %>% rowwise %>% mutate(presum=do.call(sum, map(l, get_from_df)))
# A tibble: 10 x 3
# Rowwise: 
       x     y presum
   <int> <int>  <int>
 1     1    21    310
 2     2    22    310
 3     3    23    310
 4     4    24    310
 5     5    25    310
 6     6    26    310
 7     7    27    310
 8     8    28    310
 9     9    29    310
10    10    30    310

我最终没有使用rowSum代替按行返回。

df %>%  mutate(presum=rowSums(do.call(cbind, map(l,f)) ))

它可以工作,但我想更好地了解rowwise在幕后做了什么以及我遇到了什么限制。在我抽出时间阅读一些代码之前,有没有什么地方可以描述这一点?


共1个答案

匿名用户

也许这就是你要找的?

注意使用c_acrossall_of从整齐的选择。

library(tidyverse)

df <- data.frame(x=1:10, y=21:30) 
l <- c('x', 'y')
get_from_df <- function(x) { get(pos=df,x) }
#df %>% rowwise %>% mutate(presum=do.call(sum, map(l, get_from_df)))

df %>% 
  rowwise() %>% 
  mutate(presum = sum(c_across(all_of(l))))
#> # A tibble: 10 × 3
#> # Rowwise: 
#>        x     y presum
#>    <int> <int>  <int>
#>  1     1    21     22
#>  2     2    22     24
#>  3     3    23     26
#>  4     4    24     28
#>  5     5    25     30
#>  6     6    26     32
#>  7     7    27     34
#>  8     8    28     36
#>  9     9    29     38
#> 10    10    30     40

由reprex包(v2.0.1)于2021-11-24创建