r语言 - 如何定义一个函数来替换 df 中 NA 的错别字向量?



我正在尝试替换df中的一组错字,

这是我目前得到的:

master_df <- invisible(
data.frame(lapply(master_df, 
function(x) replace(x, as.matrix(x) == c("?", '-',''), NA))))

但是输出如下所示:

#  a    b    c
#1        <NA>
#2 ? <NA> <NA>
#3 1    2    1
#4 2    3    2
#5 3    4    3

并抛出下一个警告:

警告消息:1:在as.matrix (x) = = c("?","产生绯闻,"):longitude de object to mayor no es múltiplo de la longitude de uno menor

2:在as.matrix (x) = = c("?","产生绯闻,"):longitude de object to mayor no es múltiplo de la longitude de uno menor

3: as.matrix (x) = = c("?","产生绯闻,"):longitude de object to mayor no es múltiplo de la longitude de uno menor

这个想法是将整个df中的错别字集c('?', '-', '')替换为NA

我怎样才能完成这个任务?

数据
master_df <- structure(list(a = c("", "?", "1", "2", "3"), b = c("", NA, "2", 
"3", "4"), c = c(NA, NA, "1", "2", "3")), class = "data.frame", row.names = c(NA, 
-5L))

我们需要%in%而不是==,因为==是元素比较运算符

library(dplyr)
master_df2 <- master_df %>%
mutate(across(everything(), 
~ replace(., . %in% c("?", '-', ''), NA_character_))) %>% 
type.convert(as.is = TRUE)

或者使用base R

master_df[] <- lapply(master_df, function(x)
replace(x, x %in% c("?", '-', ''), NA_character_))

或使用gsub

master_df[] <- gsub('^(\?|-|)$', NA, as.matrix(master_df))
master_df <- type.convert(master_df, as.is = TRUE)

更好的选择是在使用read.csv/read.table

读取数据时指定na.strings = c("?", "-", "")

也许你可以试试下面的代码

master_df[] <- replace(as.matrix(master_df), as.matrix(master_df) %in% c("?", "-"), NA)

,

> master_df
a    b    c
1           <NA>
2 <NA> <NA> <NA>
3    1    2    1
4    2    3    2
5    3    4    3

最新更新