Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何跨多个列有条件地用NA替换值_R_Replace_Dplyr_Na - Fatal编程技术网

R 如何跨多个列有条件地用NA替换值

R 如何跨多个列有条件地用NA替换值,r,replace,dplyr,na,R,Replace,Dplyr,Na,我想用NA替换数据帧每列中的异常值 例如,如果我们将离群值定义为任何大于平均值3个标准偏差的值,我可以使用下面的代码实现每个变量的离群值 我不想单独指定每一列,而是希望在一次调用中对df的所有列执行相同的操作。有没有关于怎么做的建议 谢谢 library(dplyr) data("iris") df <- iris %>% select(Sepal.Length, Sepal.Width, Petal.Length)%>% head(10) # add a cl

我想用NA替换数据帧每列中的异常值

例如,如果我们将离群值定义为任何大于平均值3个标准偏差的值,我可以使用下面的代码实现每个变量的离群值

我不想单独指定每一列,而是希望在一次调用中对
df
的所有列执行相同的操作。有没有关于怎么做的建议

谢谢

library(dplyr)
data("iris")
df <- iris %>% 
  select(Sepal.Length, Sepal.Width, Petal.Length)%>% 
  head(10) 

# add a clear outlier to each variable
df[1, 1:3] = 99

# replace values above 3 SD's with NA
df_cleaned <- df %>% 
  mutate(Sepal.Length = replace(Sepal.Length, Sepal.Length > (abs(3 * sd(df$Sepal.Length, na.rm = TRUE))), NA))
库(dplyr)
数据(“iris”)
df%
选择(萼片长度、萼片宽度、花瓣长度)%>%
总目(10)
#为每个变量添加一个清晰的异常值
df[1,1:3]=99
#将3个标准差以上的值替换为NA
df_已清洁%
变异(萼片长度=替换(萼片长度,萼片长度>(abs(3*sd(df$Sepal.Length,na.rm=TRUE)),na))

您需要使用
mutate_all()
,即

library(dplyr)

df %>% 
 mutate_all(funs(replace(., . > (abs(3 * sd(., na.rm = TRUE))), NA)))

另一个选项是
base R

df[] <- lapply(df, function(x) replace(x, . > (abs(3 * sd(x, na.rm = TRUE))), NA))

解决了的!我以为我已经尝试了变异,但结果证明我的点在错误的地方。谢谢你的帮助。
library(matrixStats)
df[df > abs(3 * colSds(as.matrix(df), na.rm = TRUE))] <- NA