将相同的函数应用于几对变量

时间:2019-08-02 23:23:43

标签: r regex rowsum

我正在对多项商品的属性进行分析。为此,我需要为每个项目计算两个变量的分数(均值或总和)。单个项目很容易做到,但是我找不到一种自动解决所有问题的方法。

我的数据看起来像这样

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多个项目。

是否可以为每个项目自动应用相同的公式?

1 个答案:

答案 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$)中拥有的删除了列名(\\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)