仅用一列用NA替换所有高于X的值

问题描述

我的数据框中有一列具有极端异常值,我想用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


问题中的代码为何不起作用的汇编(及其替代方案):

  1. naniar::replace_with_na_all dataframe 作为其第一个参数。由于您只想替换一列,因此naniar::replace_with_na_at才是您真正需要的。用法:
replace_with_na_at(DATA,"ColumnName",~ .x > 30)
  1. dplyr::na_if接受单个值(而不是条件)作为第二个参数。dplyr没有提供单个函数来替换满足NA条件的值。 dplyr风格的最接近解决方案:
mutate(DATA,ColumnName = case_when(ColumnName > 30 ~ NA_real_,TRUE ~ ColumnName))
  1. 提供的基本R方法实际上应该可以工作,就像使用以下替代方法一样:
is.na(DATA$ColumnName) <- DATA$ColumnName > 30
DATA$ColumnName[Data$ColumnName > 30] <- NA