我是R的新手,来自Python背景。我已经加载了一个数据帧:
df = read.csv('data.csv', stringsAsFactors = FALSE,
colClasses = colClass,na.strings = c("NA", ""))
我的目标是确保数据框中没有缺失值。我正在考虑编写代码:
df = na.omit(df)
它没有删除缺失的值,然后我意识到这可能是因为导入了数据帧。我将它导入数据框,我在其中更改了" NA"到""。
我的问题是,是否存在类似于NA的函数,我可以在其中明确删除具有值""?的行。
任何帮助都会很棒!
答案 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