如何合并数据框中的每两列?

时间:2016-04-07 11:24:20

标签: r

我的数据是这样的

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

我希望有这样的东西有两个条件,如果连续有两个值,那么得到它们的平均值。如果一个值和一个零然后放置值,如果两个都为零,则为零

所以输出看起来像这样

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

我不需要得到平均值,因为我们有很多零,并且如下所述会影响结果。

1 个答案:

答案 0 :(得分:1)

我们通过使用listseq生成replace生成的索引对相邻两列对进行子集来创建NA,得到rowMeans },再做一次replace NaN到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