2016-04-07 15 views
1

私のデータは、私は、行にし、それらの平均値を取得する二つの値が存在する場合、2つの条件で、このような何かをしたい、このデータフレームから2つの列をマージするにはどうすればよいですか?

V2 V4  V6 V8 
0  0.34  1 3 
0.24 0  0.3 0 
0  0  0 110 
0  11  0 0 
120  0  20 0 
0  90  0 21 

のようなものです。一つの値と1つのゼロは、値を入れて、ゼロの両方の場合ならば、ゼロ

ので、出力は私があるため、我々が持っている多くのゼロのと、平均を取得する必要はありません。この

V2  V6 
0.34 2 
0.24 0.3 
0  110 
11  0 
120  20 
90  21 

のように見えます以下は、結果に影響を与えると述べた。

+0

に二replaceNaNはあなたがない、rowMeansを取得し、インデックスはNAseqreplace 0を使用して生成して隣接する二つの列のペアをサブセット化によってlistを作成2つの列の平均を行っていますか? – akrun

+0

NAを0に置き換え、rowMeanをna.rm = T – spore234

+0

と使用すると、@akrun averagingが問題を解決する可能性があります。平均値ゼロがその値になるからです! – nik

答えて

1

我々は0

m1 <- sapply(seq(1, ncol(df1), by=2), function(i) { 
      x1 <- df1[ i:min((i+1), ncol(df1))] 
      x2 <- rowMeans(replace(x1, x1==0, NA), na.rm=TRUE) 
      replace(x2, is.nan(x2),0) 
}) 
d1 <- as.data.frame(m1) 
d1 
#  V1 V2 
#1 0.34 2.0 
#2 0.24 0.3 
#3 0.00 110.0 
#4 11.00 0.0 
#5 120.00 20.0 
#6 90.00 21.0 
+0

data.frameを最初に置くと何も変わりませんか?なぜなら、出力をデータフレームとしてではなく行列として持っていきたいからです。 – nik

+0

@Molマトリックスをdata.frameに変換する方が簡単です。i..e 'as.data.frame' – akrun

+1

感謝しました。 – nik

関連する問題