我正在对多项商品的属性进行分析。为此,我需要为每个项目计算两个变量的分数(均值或总和)。单个项目很容易做到,但是我找不到一种自动解决所有问题的方法。
我的数据看起来像这样
A_comp A_inn1 A_inn2 F_comp F_inn1 F_inn2
7 6 5 2 4 6
6 5 2 4 7 3
6 8 5 2 7 6
我可以使用此代码并更改每个项目的变量名称
A_innScore <- A_inn1 + A_inn2
但是那要花很多时间,因为我有60多个项目。
是否可以为每个项目自动应用相同的公式?
答案 0 :(得分:1)
sapply(split.default(df1, sub("\\d$", "", names(df1))), rowSums)
#> A_comp A_inn F_comp F_inn
#> [1,] 7 11 2 10
#> [2,] 6 7 4 10
#> [3,] 6 13 2 13
我们可以根据它们的名称拆分数据。我在sub
(即\\d$
)中拥有的regex删除了列名(\\d
)末尾的数字($
)。然后split
使用那些。最后,我使用sapply
遍历列表的每个元素(根据相似名称分组的列)并计算rowSums
。
查看每个步骤的输出以获得更好的解释:
sub("\\d$", "", names(df1))
#> [1] "A_comp" "A_inn" "A_inn" "F_comp" "F_inn" "F_inn"
split.default(df1, sub("\\d$", "", names(df1)))
#> $A_comp
#> A_comp
#> 1 7
#> 2 6
#> 3 6
#> $A_inn
#> A_inn1 A_inn2
#> 1 6 5
#> 2 5 2
#> 3 8 5
#> $F_comp
#> F_comp
#> 1 2
#> 2 4
#> 3 2
#> $F_inn
#> F_inn1 F_inn2
#> 1 4 6
#> 2 7 3
#> 3 7 6
数据:
df1 <- read.table(text="A_comp A_inn1 A_inn2 F_comp F_inn1 F_inn2
7 6 5 2 4 6
6 5 2 4 7 3
6 8 5 2 7 6 ", header = T)