我正在尝试替换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