首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中其他值的na.rm

R中其他值的na.rm
EN

Stack Overflow用户
提问于 2016-06-17 11:16:31
回答 3查看 102关注 0票数 0

我有一个数据框架

代码语言:javascript
复制
df=data.frame(a=1:5,b=c(1,3,4,-999999,4))

并想要计算它的平均值,但想要导出异常值,在本例中是-9999。

是否有类似于

代码语言:javascript
复制
na.rm

这样我就可以走了

代码语言:javascript
复制
apply(df,1,function(x) mean(if x>-100 & x <100))

请注意,我的df如果600 x 50 dim

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-17 11:37:44

如果你想要整个数据帧的平均值,你可以切入到追逐和使用:

代码语言:javascript
复制
mean(df[df > -100 & df < 100])

当我把它应用到你给出的df时,我得到了预期的答案: 3。

票数 2
EN

Stack Overflow用户

发布于 2016-06-17 11:21:56

我们可以根据逻辑条件对'df‘中的值进行replace,并使用rowMeans

代码语言:javascript
复制
rowMeans(replace(df, !(df < 100 & df > -100) , NA), na.rm=TRUE)
#[1] 1.0 2.5 3.5 4.0 4.5

或评论中提到的@RHertel

代码语言:javascript
复制
rowMeans(replace(df, abs(df) > 100 , NA), na.rm=TRUE) 
#[1] 1.0 2.5 3.5 4.0 4.5

或者另一种选择是循环遍历'df‘的列,使用boxplot.stats获取异常值观察,将异常值转换为NA并执行rowMeans

代码语言:javascript
复制
rowMeans(sapply(df, function(x)  x*NA^(x %in% boxplot.stats(x)$out)), na.rm=TRUE)
#[1] 1.0 2.5 3.5 4.0 4.5
票数 2
EN

Stack Overflow用户

发布于 2016-06-17 11:48:49

您编写自己的函数(不包括-9999值)。

代码语言:javascript
复制
y<-function(x){mean(x[!grepl("\\-999",x)])}

y(df$b)

[1] 3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37880215

复制
相关文章

相似问题

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