替换“。”通过NA在数据框中“。”也用作十进制

时间:2014-03-06 10:22:37

标签: r dataframe na

我有一个数据框“。”用作十进制标记,单独用作NA。

A    B    C    D
1    .  1.2    6
1   12    .    3
2   14  1.6    4

要处理此数据框,我需要获取:

A    B    C    D
1   NA  1.2    6
1   12   NA    3
2   14  1.6    4

我应如何处理以保持小数,但单独转换“。”在C列?

以下是可重现格式的数据:

data <- structure(list(A = c(1L, 1L, 2L), B = c(".", "12", "14"), C = c("1.2", 
    ".", "1.6"), D = c(6L, 3L, 4L)), .Names = c("A", "B", "C", "D"), 
    class = "data.frame", row.names = c(NA, -3L))

2 个答案:

答案 0 :(得分:2)

假设您的数据框为data

data[data == "."] <- NA

应该有效。或者:

data <- sapply(data, as.numeric)

答案 1 :(得分:1)

您可以使用type.convert并指定"."作为na.string

df <- data ## Create a copy in case you need the original form
df
#   A  B   C D
# 1 1  . 1.2 6
# 2 1 12   . 3
# 3 2 14 1.6 4

df[] <- lapply(df, function(x) type.convert(as.character(x), na.strings="."))
df
#   A  B   C D
# 1 1 NA 1.2 6
# 2 1 12  NA 3
# 3 2 14 1.6 4

请注意,参数为na.strings(带有复数&#34; s&#34;),因此如果您有任何字符,可以指定更多字符作为NA值。

另外,这个问题的实际答案可能只是在您第一次将数据读入R时指定na.strings参数,可能是read.table或{{ 1}}。

让我们复制从R中读取csv的过程:

read.csv