问题描述
我的数据框中有一列具有极端异常值,我想用NA代替。我该怎么做。基本上,我想用NA替换列中所有大于30的值。
replace_with_na_all(DATAt$ColumnName,~ .x > 30)
na_if(DATA,DATAt$ColumnName>30)
DATA[,5][DATA[,5] >30] <- NA
解决方法
@Rui Barradas的有益评论:
is.na(DATA[[5]]) <- DATA[[5]] > 30
问题中的代码为何不起作用的汇编(及其替代方案):
-
naniar::replace_with_na_all
将 dataframe 作为其第一个参数。由于您只想替换一列,因此naniar::replace_with_na_at
才是您真正需要的。用法:
replace_with_na_at(DATA,"ColumnName",~ .x > 30)
-
dplyr::na_if
接受单个值(而不是条件)作为第二个参数。dplyr
没有提供单个函数来替换满足NA条件的值。dplyr
风格的最接近解决方案:
mutate(DATA,ColumnName = case_when(ColumnName > 30 ~ NA_real_,TRUE ~ ColumnName))
- 提供的基本R方法实际上应该可以工作,就像使用以下替代方法一样:
is.na(DATA$ColumnName) <- DATA$ColumnName > 30
DATA$ColumnName[Data$ColumnName > 30] <- NA