我有一个数据帧,看起来像这个
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))