使用dplyr逐行对列序列进行求和

3

在类似这些问题的启发下(这里)(这里),我希望能够对我的data_frame中一系列的列进行求和,并创建一个新的列:

df_abc = data_frame(
  FJDFjdfF = seq(1:100),
  FfdfFxfj = seq(1:100),
  orfOiRFj = seq(1:100),
  xDGHdj = seq(1:100),
  jfdIDFF = seq(1:100),
  DJHhhjhF = seq(1:100),
  KhjhjFlFLF = seq(1:100),
  IgiGJIJFG= seq(1:100),
)

# this does what I want
df_abc %>% 
  mutate(
    sum_1 = orfOiRFj + xDGHdj + jfdIDFF + DJHhhjhF
  ) 

很显然,如果这个序列中有很多变量,那么逐个打出来是不可行的。此外,变量名不符合正则表达式规则,所以不能通过规则选择它们,除了这些变量按顺序出现之外。

我希望在tidyverse中存在一种抽象方法,可以实现以下操作:

df_abc %>% 
  mutate(
    sum_1 = sum(orfOiRFj:DJHhhjhF)
  )

感谢您的选择。

2
这可能是 https://dev59.com/-V4c5IYBdhLWcg3w9-F2 的重复。在我的答案中,我包含了一个选项,可以将其翻译为 df_abc %>% mutate(sum_1 = select(。,orfOiRFj:DJHhhjhF)%>% rowSums()) 以供您参考。 - talat
2
可能是dplyr mutate rowSums计算或自定义函数的重复问题。 - h3rm4n
1个回答

15

您可以使用rowSums来完成这个操作:

# option 1
df_abc %>% mutate(sum_1 = rowSums(.[3:6]))
# option 2
df_abc %>% mutate(sum_1 = rowSums(select(.,orfOiRFj:DJHhhjhF)))

结果:

# A tibble: 100 x 9
   FJDFjdfF FfdfFxfj orfOiRFj xDGHdj jfdIDFF DJHhhjhF KhjhjFlFLF IgiGJIJFG sum_1
      <int>    <int>    <int>  <int>   <int>    <int>      <int>     <int> <dbl>
 1        1        1        1      1       1        1          1         1     4
 2        2        2        2      2       2        2          2         2     8
 3        3        3        3      3       3        3          3         3    12
 4        4        4        4      4       4        4          4         4    16
 5        5        5        5      5       5        5          5         5    20
 6        6        6        6      6       6        6          6         6    24
 7        7        7        7      7       7        7          7         7    28
 8        8        8        8      8       8        8          8         8    32
 9        9        9        9      9       9        9          9         9    36
10       10       10       10     10      10       10         10        10    40
# ... with 90 more rows

1
不想对所有列求和,只想对特定序列的列求和。这是问题标题中的内容。 - tchakravarty
@tchakravarty,我已经更新了我的回答,希望能够解决你的问题。 - h3rm4n
这看起来只是我在链接帖子中回答的重复。 - talat
@docendodiscimus,我在更新我的答案之后才看到你的评论。已经给你的答案点赞了 :-) - h3rm4n

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接