我有附加的csv文件。如何用NA填充空白单元格或将其删除?
我尝试遵循Change the Blank Cells to "NA"中的代码,但没有任何反应。
sm2=read.csv('sample_info_2.csv',header=T, na.strings=" ")
sm3 <- sm2 %>% mutate_all(na_if,"")
sm3=sm2[complete.cases(sm2),]
答案 0 :(得分:1)
我认为@akrun的评论是正确的(如果可能的话,确实应该在数据导入中进行处理),但是如果您需要在导入后进行处理,那么它可能会遗漏一点:因为您的mutate_all(na_if, "")
无效,则您的字段只能使用空格,并且包含一个或更多空格字符。如果所有这些字段都具有相同数量的空格,那么也许
sm2 %>% mutate_all(na_if, " ") # or " " or " " ...
可以工作,但是不灵活。更为宽松的技术可能是:
sm2 %>% mutate_if(is.character, ~ if_else(grepl("\\S", .), ., NA_character_))
这有两件事:
我不认为您的所有列都是字符串,因此mutate_if(is.character, ...)
而不是mutate_all
也许很小。和
grepl("\\S", .)
将为向量中具有一个(或多个)非空白字符的所有元素返回TRUE
,并且if_else
处理为false时将进行替换。 (将其描述为nzchar(gsub("\\s", "", .))
可能也是可行的,它首先删除所有空白,然后对于大于0的字符串长度返回true。)
答案 1 :(得分:1)
要使用NA填充所有空白,您需要使用na.strings参数覆盖更多选项。 这是一个虚拟示例,演示了如何填充数字和字符串列中的空白。
col1 <- rep(c(1,2,"",3), 3)
col2 <- rep(c(2,3,"",4), 3)
col3 <- rep(c("a","","b","c"), 3)
my_df <- data.frame(col1, col2, col3)
csv_file_path <- paste0(getwd(), "/", "data_with_gaps.csv")
write.csv(my_df, csv_file_path, row.names = FALSE)
df <- read.csv(csv_file_path, header = TRUE, na.strings = c(""," ", "NA"))