首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置为零行值比行均值大

设置为零行值比行均值大
EN

Stack Overflow用户
提问于 2020-10-29 19:52:47
回答 3查看 25关注 0票数 0

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

代码语言:javascript
复制
 v1 v2 v3 v4 v5 
 4   1  3  4  3
 2   2  2  1  1
 2   10 2  1  2
 etc.

我希望对数据帧进行转换,以便只保留高于原始平均值的原始值,而将其他值设置为零。结果将是:

代码语言:javascript
复制
 v1 v2 v3 v4 v5 
 4   0  3  4  3
 2   2  2  0  0
 0   10 0  0  0
 etc.

我尝试过这样的方法,但它不起作用(X是数据帧):

代码语言:javascript
复制
X<- X[sweep(X, 1, rowMeans(X) < 0)] <- 0
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-10-29 19:54:31

一种选择可能是:

代码语言:javascript
复制
(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
票数 2
EN

Stack Overflow用户

发布于 2020-10-29 19:58:55

使用sweep,你可以做到:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2020-10-30 06:45:41

replace的一个选项

代码语言:javascript
复制
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

数据

代码语言:javascript
复制
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))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64590550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档