按变量名计算行总和

Calculate row sums by variable names

计算逐行总和的最简单方法是什么?例如,如果我想用“txt_”计算所有变量的总和? (见下面的例子)

df <- data.frame(var1 = c(1, 2, 3),
                 txt_1 = c(1, 1, 0),
                 txt_2 = c(1, 0, 0),
                 txt_3 = c(1, 0, 0))

基础 R

我们可以先使用grepl找到以txt_开头的列名,然后在子集上使用rowSums

rowSums(df[, grepl("txt_", names(df))])

[1] 3 1 0

如果你想把它绑定回原始数据框,那么我们可以将输出绑定到原始数​​据框。

cbind(df, sums = rowSums(df[, grepl("txt_", names(df))]))

  var1 txt_1 txt_2 txt_3 sums
1    1     1     1     1    3
2    2     1     0     0    1
3    3     0     0     0    0

Tidyverse

library(tidyverse)

df %>% 
  mutate(sum = rowSums(across(starts_with("txt_"))))

  var1 txt_1 txt_2 txt_3 sum
1    1     1     1     1   3
2    2     1     0     0   1
3    3     0     0     0   0

或者如果你只想要向量,那么我们可以使用 pull:

df %>% 
  mutate(sum = rowSums(across(starts_with("txt_")))) %>% 
  pull(sum)

[1] 3 1 0

数据Table

这里还有一个data.table选项:

library(data.table)
dt <- as.data.table(df)

dt[ ,sum := rowSums(.SD), .SDcols = grep("txt_", names(dt))]

dt[["sum"]]
# [1] 3 1 0

另一个 dplyr 选项:

df %>% 
  rowwise() %>%
  mutate(sum = sum(c_across(starts_with("txt"))))