gpt4 book ai didi

r - 计算差异并在单独的列中求和

转载 作者:行者123 更新时间:2023-12-02 05:20:39 26 4
gpt4 key购买 nike

我有很多变量,有很多观察结果。我有一个标准变量。现在,我只想在观察值大于标准值时计算标准变量和观察变量之间的差异,并将所有差异汇总为一个单独的变量。此外,将大于标准的变量名称单独列在一列。

Names   Standard    Das Dss Tri Tet
Aa 32 42 21 45 34
Ab 23 25 43 43 32
Ac 43 34 23 32 23
Ad 23 24 33 12 23
Ae 14 24 12 20 24
Af 43 42 13 12 43
Ag 12 13 22 13 22
Ah 32 32 42 42 23

输出:

Names   Standard    Das Dss Tri Tet Difference  No_Difference   Names_Difference
Aa 32 42 21 45 34 15 3 Das, Tri, Tet
Ab 23 25 43 43 32 52 4 Das,Dss,Tri,Tet
Ac 43 34 23 32 23 0 0 NA
Ad 23 24 33 12 23 10 2 Das,Dss
Ae 14 24 12 20 24 26 4 Das,Tri,Tet
Af 43 42 13 12 43 0 0 NA
Ag 12 13 22 13 22 22 4 Das,Dss,Tri,Tet
Ah 32 32 42 42 23 20 2 Dss,Tri

最佳答案

假设您上面的数据存储在对象 df 中。那么这应该可以工作

df2 <- do.call(rbind, apply(df[, -1], 1, function(z) {
ind <- z[2:5] > z[1]
return(cbind.data.frame(
Difference = sum(z[2:5][ind] - z[1]),
No_Difference = sum(ind),
Names_Difference = paste(colnames(df[3:6])[ind],
collapse = ", ")
))
}))

df <- cbind(df, df2)
df

Names Standard Das Dss Tri Tet Difference No_Difference Names_Difference
1 Aa 32 42 21 45 34 25 3 Das, Tri, Tet
2 Ab 23 25 43 43 32 51 4 Das, Dss, Tri, Tet
3 Ac 43 34 23 32 23 0 0
4 Ad 23 24 33 12 23 11 2 Das, Dss
5 Ae 14 24 12 20 24 26 3 Das, Tri, Tet
6 Af 43 42 13 12 43 0 0
7 Ag 12 13 22 13 22 22 4 Das, Dss, Tri, Tet
8 Ah 32 32 42 42 23 20 2 Dss, Tri

虽然这不是很优雅,而且使用整数来索引列也不是很稳健,以防变量的顺序在某个时候发生变化

关于r - 计算差异并在单独的列中求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13895216/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com