我有一个数据帧,看起来像这样
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发布于 2020-10-29 19:54:31
一种选择可能是:
(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发布于 2020-10-29 19:58:55
使用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发布于 2020-10-30 06:45:41
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))https://stackoverflow.com/questions/64590550
复制相似问题