r-设置为零行值lover而不是rowmean



我有一个数据帧,看起来像这个

v1 v2 v3 v4 v5 
4   1  3  4  3
2   2  2  1  1
2   10 2  1  2
etc.

我想转换数据帧,这样只保留高于原始平均值的原始值,其他值设置为零结果是:

v1 v2 v3 v4 v5 
4   0  3  4  3
2   2  2  0  0
0   10 0  0  0
etc.

我试过这样的东西,但它不起作用(X是数据帧(:

X<- X[sweep(X, 1, rowMeans(X) < 0)] <- 0

一个选项可以是:

(df > rowMeans(df)) * df
v1 v2 v3 v4 v5
1  4  0  0  4  0
2  2  2  2  0  0
3  0 10  0  0  0

使用sweep可以完成:

df[sweep(df, 1, rowMeans(df), `<`)] <- 0
df
#  v1 v2 v3 v4 v5
#1  4  0  3  4  3
#2  2  2  2  0  0
#3  0 10  0  0  0

带有replace的选项

replace(X, X <= rowMeans(X), 0)
#  v1 v2 v3 v4 v5
#1  4  0  0  4  0
#2  2  2  2  0  0
#3  0 10  0  0  0

数据

X <- structure(list(v1 = c(4L, 2L, 2L), v2 = c(1L, 2L, 10L), v3 = c(3L, 
2L, 2L), v4 = c(4L, 1L, 1L), v5 = c(3L, 1L, 2L)), class = "data.frame", 
row.names = c(NA, 
-3L))

相关内容

  • 没有找到相关文章

最新更新