R 如何在保留整个数据帧的同时对某些列应用函数?

R 如何在保留整个数据帧的同时对某些列应用函数?,r,apply,lapply,R,Apply,Lapply,当数据帧中的某些列等于33时,我尝试将NA分配给它们 df$A[df$A == 33] <- NA df$B[df$B == 33] <- NA df$C[df$C == 33] <- NA 但这给我留下了一个数据帧,它只包含那些指定的列。(我尽量避免使用cbind,因为在任何一步实际需要执行多个cbind/rbind/merge时,它都会变得复杂) 有更简单的方法吗?这里有一个选项,指定向量('nm1')中感兴趣的列,并指定列的子集,其中该子集等于33,使用NA nm1 &

当数据帧中的某些列等于33时,我尝试将NA分配给它们

df$A[df$A == 33] <- NA
df$B[df$B == 33] <- NA
df$C[df$C == 33] <- NA
但这给我留下了一个数据帧,它只包含那些指定的列。(我尽量避免使用cbind,因为在任何一步实际需要执行多个cbind/rbind/merge时,它都会变得复杂)
有更简单的方法吗?

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

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

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

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

Tidyverse版本类似于

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

Tidyverse版本类似于

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

问题说的是“某些栏目”,这表明有些栏目需要避免。也许,
df[ind]这个问题说的是“某些列”,这表明有一些列需要避免。也许
df[ind]
dplyr::mutate_at
就是为此而设计的
dplyr::mutate_at
就是为此而设计的