我有一个数据框“。”用作十进制标记,单独用作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))
答案 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