【发布时间】:2017-11-06 13:00:48
【问题描述】:
我正在构建一个函数来将一些字符(如“-”)替换为 R 中 data.table 内的正确 NA。
我的功能如下:
na_replacer <- function(data_set, characters_to_replace) {
text_features <- names(data_set)[sapply(data_set, class) %in% c("character","factor")]
for (x in text_features) {
data_set[, lapply(.SD, function(x) replace(x, which(x==any(characters_to_replace)), NA))]
}
return (data_set)
}
当我运行这个函数时,我得到了以下异常:
charToDate(x) 中的错误:
字符串不在标准中 明确的格式
你能帮我让这个功能按预期工作吗?或者也许有一个更短的版本来做我尝试执行的操作?
这是一个调用函数的示例数据集
DT = data.table(ID = c("foo","bar","-","foo","[]","bah"), a = 1:6, b = 7:12, c = 13:18, d = c("aaa", "bbb", "ccc", "_", "eeee", "ffff"))
DT <- na_replacer(data_set = DT, characters_to_replace = c('-', '_', '[]'))
之前的数据集:
ID a b c d
1: foo 1 7 13 aaa
2: bar 2 8 14 bbb
3: - 3 9 15 ccc
4: foo 4 10 16 _
5: [] 5 11 17 eeee
6: bah 6 12 18 ffff
之后的预期数据集:
ID a b c d
1: foo 1 7 13 aaa
2: bar 2 8 14 bbb
3: NA 3 9 15 ccc
4: foo 4 10 16 NA
5: NA 5 11 17 eeee
6: bah 6 12 18 ffff
【问题讨论】:
-
这不适合你吗?
gsub('-','NA',df$text) -
请edit您的问题并添加minimal reproducible example。谢谢。
-
@Uwe 我添加了一个具有预期输出的可验证样本。我希望这会更好;谢谢
-
这个data.table是怎么创建的?如果从文件中读取,您可以使用
fread()和参数na.strings = c('-', '_', '[]')。 -
确实,数据是从文件中读取的,但是我想将 NA 解析限制为“字符”和“因子”。此外,在我的管道中,NA 是作为数据转换的结果引入的(不是 NA,而是其他字符)。尽管如此,我将使用您的建议来替换初始 NA。谢谢
标签: r data.table na