按变量名计算行总和
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"))))
计算逐行总和的最简单方法是什么?例如,如果我想用“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"))))