我试图在数据帧中的某些列等于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时,它会变得很复杂) 有更简单的方法吗?
答案 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