使用R将某些行的值求和到新列中

时间:2019-02-09 07:17:24

标签: r

我当前正在使用的数据包含四列,我想通过它们的唯一ID将它们累加到新列中。我是使用R的新手,所以可以提供任何帮助!谢谢

输入列和所需输出的示例:

Here

5 个答案:

答案 0 :(得分:0)

像这样(以虹膜数据集为例)

iris$new_col <- iris$Sepal.Length + iris$Sepal.Width

以您为例

df$Sum <- df$Pillar_1 + df$Pillar_2 + df$Pillar_3

这假设您的数据帧称为df

答案 1 :(得分:0)

使用dplyr

library(tidyverse)

df <- tibble(
  opportunity = c(
    639495, 303678, 629464, 297662, 302891
  ),
  `Pillar 1` = c(
    4, 3, 5, 3, 2
  ),
  `Pillar 2` = c(
    7, 8, 9, 4, 4
  ),
  `Pillar 3` = c(
    4, 6, 2, 5, 8
  )
)

df %>% mutate(
  Sum = `Pillar 1` + `Pillar 2` + `Pillar 3`
)

产生输出

# A tibble: 5 x 5
  opportunity `Pillar 1` `Pillar 2` `Pillar 3`   Sum
                           
1      639495          4          7          4    15
2      303678          3          8          6    17
3      629464          5          9          2    16
4      297662          3          4          5    12
5      302891          2          4          8    14

答案 2 :(得分:0)

df <- data.frame(
  opportunity = c(
    639495, 303678, 629464, 297662, 302891
  ),
  Pillar1 = c(
    4, 3, 5, 3, 2
  ),
  Pillar2 = c(
    7, 8, 9, 4, 4
  ),
  Pillar3 = c(
    4, 6, 2, 5, 8
  )
)

df$Sum <- apply(df[,-1], 1, sum)

> df
  opportunity Pillar1 Pillar2 Pillar3 Sum
1      639495       4       7       4  15
2      303678       3       8       6  17
3      629464       5       9       2  16
4      297662       3       4       5  12
5      302891       2       4       8  14

答案 3 :(得分:0)

使用dplyr,您还可以执行以下操作:

library(dplyr)

df %>% 
  mutate(Sum = rowSums(select(., contains("Pillar"))))

输出:

  opportunity Pillar1 Pillar2 Pillar3 Sum
1      639495       4       7       4  15
2      303678       3       8       6  17
3      629464       5       9       2  16
4      297662       3       4       5  12
5      302891       2       4       8  14

如果您想在Sum中包含某些不包含Pillar作为字符串的列,则还可以按如下索引进行过滤:

df %>% 
  mutate(Sum = rowSums(select(., 2:4)))

或者如果您想对除第一列之外的所有列求和(而不是2:4),那么-1而不是compilerPath

答案 4 :(得分:0)

这里是使用tidyverse

的选项
library(tidyverse)
df %>%
    mutate(Sum = select(., starts_with('Pillar')) %>%
                 reduce(`+`))
#   opportunity Pillar1 Pillar2 Pillar3 Sum
#1      639495       4       7       4  15
#2      303678       3       8       6  17
#3      629464       5       9       2  16
#4      297662       3       4       5  12
#5      302891       2       4       8  14

数据

df <- structure(list(opportunity = c(639495, 303678, 629464, 297662, 
 302891), Pillar1 = c(4, 3, 5, 3, 2), Pillar2 = c(7, 8, 9, 4, 
 4), Pillar3 = c(4, 6, 2, 5, 8)), class = "data.frame", 
  row.names = c(NA, -5L))