如何从数据框中删除空白单元格?

时间:2019-08-01 15:26:26

标签: r

我有附加的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),]

enter image description here 我想删除空白单元格或用NA填充它们。有什么帮助吗?最好,Zillur

2 个答案:

答案 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_))

这有两件事:

  1. 我不认为您的所有列都是字符串,因此mutate_if(is.character, ...)而不是mutate_all也许很小。和

  2. 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"))