对多对变量应用相同的函数
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
中的 regex(即 \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)
我正在对多个项目的属性进行分析。为此,我需要计算每个项目的两个变量的分数(均值或总和)。对单个项目执行此操作很容易,但我找不到自动对所有项目执行此操作的方法。
我的数据是这样的
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
中的 regex(即 \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)