0

誰でも助けてくれますか。多くの列の値を 1 つの列と比較したい。いずれかの列の値が標準列の値よりも大きい場合は、新しい列に 1 を入れます。それ以外の場合は 0 を入れます。ファイルがたくさんあるので、ループで使用したいと思います。

df:
    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    Total
Aa  32  42  21  45  34  15  3   Das, Tri, Tet   1
Ab  23  25  43  43  32  52  4   Das,Dss,Tri,Tet 1
Ac  43  34  23  32  23  0   0   NA  0
Ad  23  24  33  12  23  10  2   Das,Dss 1
Ae  14  24  12  20  24  26  4   Das,Tri,Tet 1
Af  43  42  13  12  43  0   0   NA  0
Ag  12  13  22  13  22  22  4   Das,Dss,Tri,Tet 1
Ah  32  32  42  42  23  20  2   Dss,Tri 1

@adibender から提供されたこのコードを使用しています。

df2 <- do.call(rbind, apply(df[, -1], 1, function(z) {
        ind <- z[2:5] > z[1]
        return(cbind.data.frame( Total= if(z[2:5]>z[1]{'1'} else {'0'},
                        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)
4

1 に答える 1

1

何を探しているのかよくわかりませんが、次のコマンドは新しい列 をTotalデータ フレームに追加し、行の値が の値よりも大きいかどうかを示しますStandard

transform(df, Total = as.integer(apply(df[-(1:2)], 1, max) > Standard))

次に結果:

  Names Standard Das Dss Tri Tet Total
1    Aa       32  42  21  45  34     1
2    Ab       23  25  43  43  32     1
3    Ac       43  34  23  32  23     0
4    Ad       23  24  33  12  23     1
5    Ae       14  24  12  20  24     1
6    Af       43  42  13  12  43     0
7    Ag       12  13  22  13  22     1
8    Ah       32  32  42  42  23     1
于 2012-12-21T13:43:55.813 に答える