如何在R中将点重新编码为NA?

Mar*_*rie 2 r na

我有一个数据集,其中缺失值已用点编码。我想让缺失值空白(NA)。

这是数据框:

df <- data.frame(ITEM1 = c(6, 8, '.'),
                   ITEM2 = c(1, 6, 9),
                   ITEM3 = c(4, 2, 5),
                   ITEM4 = c('.', 3, 2),
                   ITEM5 = c(1, 6, 9)
)

df

ITEM1 ITEM2 ITEM3 ITEM4 ITEM5
1     6     1     4     .     1
2     8     6     2     3     6
3     .     9     5     2     9
> 
Run Code Online (Sandbox Code Playgroud)

akr*_*run 5

character由于存在 ,列将是类.。创建一个逻辑matrixwith==并将这些元素分配给NA,然后将 data.frame 列转换为其适当的类型type.convert

df[df == "." & !is.na(df)] <- NA
df <- type.convert(df, as.is = TRUE)
Run Code Online (Sandbox Code Playgroud)

或者在一个步骤中replace(在内部进行分配)

df <- type.convert(replace(df, df == "." & !is.na(df), NA), as.is = TRUE)
Run Code Online (Sandbox Code Playgroud)

或者另一种方法是

df[] <- lapply(df, function(x) replace(x x %in% '.', NA))
df <- type.convert(df, as.is = TRUE)
Run Code Online (Sandbox Code Playgroud)

通常,这可以一起避免,同时读取数据本身,即na.strings = "."read.csv/read.table等中指定。