我的数据是这样的
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
我不需要得到平均值,因为我们有很多零,并且如下所述会影响结果。
答案 0 :(得分:1)
我们通过使用list
,seq
生成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