我的数据是这样的
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
我不需要获得平均值,因为我们拥有许多零,并且如下所述会影响结果。
我们list
通过将使用生成的索引对相邻的两列对进行子集化来创建一个seq
,replace
其中0与NA
,得到rowMeans
,秒对0replace
进行NaN
求值。
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句