【发布时间】:2021-03-28 00:14:48
【问题描述】:
我有一个看起来像这样的数据框。
df <- tibble::tribble(
~name, ~x, ~y, ~z,
"N/A", 1, "N/A", -100,
"N A", 3, "NOt available", -99,
"N / A", NA, "29", -98,
"Not Available", -99, "25", -101,
"John Smith", -98, "28", -1)
我想使用 map() 和/或 data.table() 将字符变量中“N/A”或“N A”的所有观察结果替换为NA。
我尝试了以下方法,但似乎不起作用:
chvar <- keep(df,is.character)%>%names()
rpl.NA<- as_mapper(~setDT(df)[.x%in%c("N/A","N A"),.x:=NA])
wrong <- map(chvar,rpl.NA)
这种方法的问题在于它会生成一个包含多个数据帧的列表,而不是简单地返回一个数据帧。 我也试过了
wrong2<-df%>%mutate_at(chvar, list(~replace(., "N/A", NA)))
但这也会产生错误。
我知道我可以通过 library(naniar) 使用以下函数来做到这一点
na_strings <- c("N/A","N A")
df <- dt %>% replace_with_na_at(.vars = chvar,
condition = ~.x %in% na_strings)
但是这个函数很慢,我必须把它应用到一个大数据集上。
有谁知道一种快速方便的方法,可以让我在选定数量的观察值上将函数应用于选定数量的变量?
非常感谢您的帮助
最好的问候
【问题讨论】:
标签: r loops data.table purrr