na.rm 对于 R 中的其他值
na.rm for other values in R
我有一个数据框
df=data.frame(a=1:5,b=c(1,3,4,-999999,4))
并想计算它的平均值,但想排除异常值,在本例中为 -9999
有没有类似
的命令
na.rm
所以我可以走了
apply(df,1,function(x) mean(if x>-100 & x <100))
注意我的 df if 600 x 50 dim
我们可以replace
根据逻辑条件将'df'中的值设为NA,并使用rowMeans
。
rowMeans(replace(df, !(df < 100 & df > -100) , NA), na.rm=TRUE)
#[1] 1.0 2.5 3.5 4.0 4.5
或者如评论中提到的@RHertel
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
.
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
如果你想要整个数据框的平均值,你可以开门见山地使用:
mean(df[df > -100 & df < 100])
当我将其应用于您提供的 df 时,我得到了预期的答案:3.
您编写自己的函数,不包括您的案例的 -9999 值
y<-function(x){mean(x[!grepl("\-999",x)])}
y(df$b)
[1] 3
我有一个数据框
df=data.frame(a=1:5,b=c(1,3,4,-999999,4))
并想计算它的平均值,但想排除异常值,在本例中为 -9999
有没有类似
的命令na.rm
所以我可以走了
apply(df,1,function(x) mean(if x>-100 & x <100))
注意我的 df if 600 x 50 dim
我们可以replace
根据逻辑条件将'df'中的值设为NA,并使用rowMeans
。
rowMeans(replace(df, !(df < 100 & df > -100) , NA), na.rm=TRUE)
#[1] 1.0 2.5 3.5 4.0 4.5
或者如评论中提到的@RHertel
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
.
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
如果你想要整个数据框的平均值,你可以开门见山地使用:
mean(df[df > -100 & df < 100])
当我将其应用于您提供的 df 时,我得到了预期的答案:3.
您编写自己的函数,不包括您的案例的 -9999 值
y<-function(x){mean(x[!grepl("\-999",x)])}
y(df$b)
[1] 3