我有一个如下所示的数据集
Variable A1 A2 A3 B1 B2 B3
Item 1 Men 1 3 3 1 2 3
Item 2 Men 1 3 3 1 2 3
Item 1 Men 1 3 3 1 2 3
Item 3 Men 2 1 2 5 3 3
Item 2 Men 1 3 3 1 2 3
我需要将列A1、A2、A3
分组为A
,将B1,B2,B3
分组为B
,此后我想对这些值进行求和。
如何在 R 中执行此操作?
最佳答案
如果您只需对几个变量执行此操作,您可以这样做:
df$A <- rowSums(df[grep("^A\\d+$", names(df))])
df$B <- rowSums(df[grep("^B\\d+$", names(df))])
df[!names(df) %in% grep("^[A-Z]{1}\\d+$", names(df), value = TRUE)]
df
# Variable Sex A B
#1 Item_1 Men 7 6
#2 Item_2 Men 7 6
#3 Item_1 Men 7 6
#4 Item_3 Men 5 11
#5 Item_2 Men 7 6
(我将“MEN”列称为 Sex,因为列名似乎太少了)。
我上面写的grep()
命令使用正则表达式。例如,"^A\\d+$"
匹配以“A”开头后跟任意位数的列名称。 grep 命令返回找到这些匹配项的索引(在列名称中),因此 rowSums 只会将正确的列相加。
第三行使用了一个非常相似的概念来删除具有以下格式的列:任何单个大写字母(A到Z)后跟任意数量的数字,都将被删除。
关于r - R 中的分组列和求和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27361550/