我得到了一个数据框"。既用作小数标记,又用作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.table
或read.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