如何确保一行没有任何""在数据框中?

时间:2018-02-18 22:33:53

标签: r

我是R的新手,来自Python背景。我已经加载了一个数据帧:

df = read.csv('data.csv', stringsAsFactors = FALSE, 
colClasses = colClass,na.strings = c("NA", ""))

我的目标是确保数据框中没有缺失值。我正在考虑编写代码:

df = na.omit(df)

它没有删除缺失的值,然后我意识到这可能是因为导入了数据帧。我将它导入数据框,我在其中更改了" NA"到""。

我的问题是,是否存在类似于NA的函数,我可以在其中明确删除具有值""?的行。

任何帮助都会很棒!

Edit1:这是第一行: enter image description here

Edit2:这是数据帧的结构: enter image description here

2 个答案:

答案 0 :(得分:1)

要执行您实际要求的操作,匿名函数和apply函数将完成此任务。

df <- df[!apply(df, 1, function(x){all(x=="")}),]

apply函数以行或列方式应用函数。第二个参数选择哪个,因此1表示行,2表示列。最后一点是我们的自定义函数,如果所有数据都是&#34;&#34;则返回TRUE。在那一行。如果您想检查NAs,可以将x==""替换为is.na(x)。最后,一旦apply返回真实和虚假的列表,我们就会把它作为我们数据帧的idex,以便只返回我们想要的行。

编辑2:结果我第一次理解它,下面就是你想要的! 编辑:我误解了你的问题,下面是我给出的原始答案,并删除了至少有一个NA的任何一行!

如果您乐意将NA留在那里,complete.cases函数将返回所有具有NA的行。即。

df <- df[complete.cases(df),]

如果您想要删除NAs,那么在您使用严格的NAs过滤掉所有行后,您就可以执行此操作。

df[is.na(df)] <- ""

答案 1 :(得分:0)

如果要将空字符串转换为NA,则另一个选项是dplyr::na_if()

# example data
dat <- tribble(~col1, ~col2, 
               1, "", 
               2, "some string", 
               3, "another string")
dat
# A tibble: 3 x 2
   col1 col2          
  <dbl> <chr>         
1  1.00 ""            
2  2.00 some string   
3  3.00 another string

dat %>% 
  na_if("") %>% 
  na.omit()
# A tibble: 2 x 2
   col1 col2          
  <dbl> <chr>         
1  2.00 some string   
2  3.00 another string