对多对变量应用相同的函数

Applying the same function on several pairs of variables

我正在对多个项目的属性进行分析。为此,我需要计算每个项目的两个变量的分数(均值或总和)。对单个项目执行此操作很容易,但我找不到自动对所有项目执行此操作的方法。

我的数据是这样的

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 多件物品。

有没有办法为每个项目自动应用相同的公式?

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)