2

同じ形式のデータセットが 3 つあるとします。

set.seed(1)
df1<-as.data.frame(matrix(sample(c(1:4),15,replace=T),nrow=5))
set.seed(2)
df2<-as.data.frame(matrix(sample(c(1:4),15,replace=T),nrow=5))
set.seed(3)
df3<-as.data.frame(matrix(sample(c(1:4),15,replace=T),nrow=5))

df1              df2               df3
  V1 V2 V3         V1 V2 V3          V1 V2 V3
1  2  4  1       1  1  4  3        1  1  3  3
2  2  4  1       2  3  1  1        2  4  1  3
3  3  3  3       3  3  4  4        3  2  2  3
4  4  3  2       4  1  2  1        4  2  3  3
5  1  1  4       5  4  3  2        4  3  3  4

私がやりたかったのは、3 つのデータセットの同じ位置にある 3 つの値の少なくとも 1 つが 3 より大きい場合に値 1 を割り当て、それ以外の場合は 0 を割り当てることです。期待する出力は次のようになります。

newdf
  V1 V2 V3  
1  0  1  0
2  1  1  0
3  0  1  1
4  1  0  0
5  1  0  1 

3 つのデータセットを 1 つにマージすることが解決策になる可能性があります。しかし、私のデータは非常に巨大であるため、その方法が良い考えであるとは思えません。どんな提案でもいただければ幸いです!

4

1 に答える 1

4

データセットのマージを節約する可能な解決策は次のとおりです

(((df1 > 3L) + (df2 > 3L) + (df3 > 3L)) > 0L) + 0L
#      V1 V2 V3
# [1,]  0  1  0
# [2,]  1  1  0
# [3,]  0  1  1
# [4,]  1  0  0
# [5,]  1  0  1

または同様に

(Reduce(`+`, list(df1 > 3L, df2 > 3L, df3 > 3L)) > 0L) + 0L

ここでの考え方は、各データセットの各値が より大きいかどうかを確認し、結果を3合計して、合計が であるかどうかを確認し、を加算して整数に変換することです。これが機能するのは、とがデータ セットの次元を保持するメソッドを持つ一般的な関数であるためです。より具体的には と を参照してください。TRUE> 00+>data.frame?Opsmethods(Ops)

于 2015-09-20T09:36:16.777 に答える