【问题标题】:R: Summing a sequence of columns row-wise with dplyrR:用 dplyr 逐行求和一系列列
【发布时间】:2018-05-15 09:52:57
【问题描述】:

本着here 和here 类似问题的精神,我希望能够对我的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)
  )

谢谢。

【问题讨论】:

标签: r dplyr tidyr tidyverse


【解决方案1】:

您可以使用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

【讨论】:

  • 不想对所有列求和,想对特定的列序列求和。这在问题标题中。
  • @tchakravarty 我已经更新了我的答案。我希望它能解决你的问题。
  • 这看起来只是我在链接帖子中的答案的副本。
  • @docendodiscimus 直到我更新我的答案后我才看到你的评论。在那里投票赞成你的答案:-)
猜你喜欢
  • 2016-07-31
  • 2015-09-20
  • 2018-11-30
  • 1970-01-01
  • 2014-12-05
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 1970-01-01
相关资源
最近更新 更多