如何在保留整个数据框架的同时将函数应用于某些列?

时间:2019-12-27 19:31:48

标签: r apply lapply

我试图在数据帧中的某些列等于33时将NA分配给它们。

df$A[df$A == 33] <- NA
df$B[df$B == 33] <- NA
df$C[df$C == 33] <- NA

...等等。

我遇到了以下代码

as.data.frame(apply(df[,c('A','B','C','D',...etc)], MARGIN=2, function(x) {ifelse(x==33, NA, x)}))

但是这给我留下了仅由那些指定列组成的数据框。 (我尝试避免使用cbind,因为当我实际上需要在任何步骤中执行多个cbind / rbind / merge时,它会变得很复杂) 有更简单的方法吗?

2 个答案:

答案 0 :(得分:3)

Tidyverse版本类似于

df = df %>% dplyr::mutate_at(c('A', 'B', 'C'), tidyr::na_if, 33)

答案 1 :(得分:0)

这是一个选项,在向量('nm1')中指定感兴趣的列,并使用NA分配该子集等于33的列的子集

nm1 <- c("A", "B", "C")
df[nm1][df[nm1]==33] <- NA

或与is.na

is.na(df[nm1]) <- df[nm1] == 33