gpt4 book ai didi

R 以相似字符串开头的不同列组的行总和

转载 作者:行者123 更新时间:2023-12-03 13:33:49 25 4
gpt4 key购买 nike

我对 R 很陌生,这是我第一次敢在这里提出问题。

我正在使用一个带有 Likert 量表的数据集,我想对共享名称中第一个字符串的不同列组进行行求和。

下面我构建了一个只有 2 行的数据框来说明我遵循的方法,尽管我希望收到有关如何编写更有效的方法的反馈。

df <- as.data.frame(rbind(rep(sample(1:5),4),rep(sample(1:5),4)))

var.names <- c("emp_1","emp_2","emp_3","emp_4","sat_1","sat_2"
,"sat_3","res_1","res_2","res_3","res_4","com_1",
"com_2","com_3","com_4","com_5","cap_1","cap_2",
"cap_3","cap_4")

names(df) <- var.names

所以,我所做的是使用 grep 函数,以便能够对以某些字符串开头的指定变量的行进行求和,并将它们存储在一个新变量中。但是我必须为每个变量编写一行新代码。
df$emp_t <- rowSums(df[, grep("\\bemp.", names(df))])
df$sat_t <- rowSums(df[, grep("\\bsat.", names(df))])
df$res_t <- rowSums(df[, grep("\\bres.", names(df))])
df$com_t <- rowSums(df[, grep("\\bcom.", names(df))])
df$cap_t <- rowSums(df[, grep("\\bcap.", names(df))])

但是数据集中有更多的变量,我想知道是否有办法只用一行代码来做到这一点。例如,某种方法可以将以相同字符串开头的变量组合在一起,然后应用行函数。

提前致谢!

最佳答案

一种可能的解决方案是转置 df并使用基数 R rowsum 计算正确列的总和功能(使用 set.seed(123) )

cbind(df, t(rowsum(t(df), sub("_.*", "_t", names(df)))))
# emp_1 emp_2 emp_3 emp_4 sat_1 sat_2 sat_3 res_1 res_2 res_3 res_4 com_1 com_2 com_3 com_4 com_5 cap_1 cap_2 cap_3 cap_4 cap_t
# 1 2 4 5 3 1 2 4 5 3 1 2 4 5 3 1 2 4 5 3 1 13
# 2 1 3 4 2 5 1 3 4 2 5 1 3 4 2 5 1 3 4 2 5 14
# com_t emp_t res_t sat_t
# 1 15 14 11 7
# 2 15 10 12 9

关于R 以相似字符串开头的不同列组的行总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30384221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com