r语言 - 在数据框中将"."替换为 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))

假设您的数据框为 data

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

应该工作。或:

data <- sapply(data, as.numeric)

您可以使用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(带有复数" S"),因此您可以指定更多字符,如果有任何字符,则可以将其视为NA值。

另外,此问题的实际答案可能是首先指定na.strings参数时,您将数据首先读取为R,也许使用read.tableread.csv

让我们复制从r:

内读取CSV的过程
x <- tempfile()
write.csv(data, x, row.names = FALSE)
read.csv(x)
#   A  B   C D
# 1 1  . 1.2 6
# 2 1 12   . 3
# 3 2 14 1.6 4
read.csv(x, na.strings = ".")
#   A  B   C D
# 1 1 NA 1.2 6
# 2 1 12  NA 3
# 3 2 14 1.6 4

相关内容

最新更新