2

多くの観測値を持つ多くの変数があります。標準変数が1つあります。ここで、観測値が標準よりも大きい場合にのみ、標準変数と観測変数の差を計算し、すべての差を個別の変数として合計したいと思います。さらに、別の列の標準よりも大きい変数の名前。

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
4

2 に答える 2

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

ただし、これはあまり洗練されておらず、変数の順序が変更された場合に備えて、整数を使用して列にインデックスを付けることはそれほど堅牢ではありません。

于 2012-12-15T20:00:39.190 に答える
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

他の誰かが名前を集めることができます:-)

于 2012-12-15T22:20:10.743 に答える