首页 > 解决方案 > 用相同类型的NA填充列的函数

问题描述

我有一个包含许多不同类型列的数据框。我想用相应类的 NA 替换每一列。

例如:

df = data_frame(x = c(1,2,3), y = c("a", "b", "c"))

df[, 1:2] <- NA

生成具有两个逻辑列的数据框,而不是数字和字符。我知道我可以告诉 R:

df[,1] = as.numeric(NA)
df[,2] = as.character(NA)

但是,对于所有可能类型为 NA 的所有列,我如何在一个循环中集体执行此操作?

标签: rdplyrna

解决方案


你可以使用这个“技巧”:

df[1:nrow(df),1] <- NA
df[1:nrow(df),2] <- NA

[1:nrow(df),]基本上告诉R用这种方式替换列中的所有值,NA并且在替换其他值之前将逻辑NA强制转换为列的原始类型。

此外,如果您有很多列要替换并且 data_frame 有很多行,我建议存储行索引并重用它们:

rowIdxs <- 1:nrow(df)
df[rowIdxs ,1] <- NA
df[rowIdxs ,2] <- NA
df[rowIdxs ,3] <- NA
...

正如@RonakShah巧妙地建议的那样,您还可以使用:

df[TRUE, 1] <- NA
df[TRUE, 2] <- NA
...

正如@Cath所指出的,当您选择多个列时,这两种方法仍然有效,例如:

df[TRUE, 1:3] <- NA
# or
df[1:nrow(df), 1:3] <- NA

推荐阅读