我有许多变量有很多观察结果。我有一个标准变量。现在,我只想在观察值大于标准值并将所有差异总结为单独的变量时计算标准变量和观测变量之间的差异。此外,在单独的列中大于标准的变量的名称。
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
答案 0 :(得分:3)
假设您上面的数据存储在对象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
尽管你的变量排序在某些时候发生了变化,但这并不是很优雅,使用整数来索引列并不是很健壮
答案 1 :(得分:2)
要仅添加标准val小于obs的值,这是一种简单的方法。我的例子是单行,所以我将使用向量。
> foo<- sample(10,10,replace=TRUE)
> foo
[1] 7 5 10 8 8 7 4 1 8 2
> sum((foo[-1]-foo[1])*(foo[-1]>foo[1]))
[1] 6
其他人可以进行名字收集: - )