如何删除嵌套数据框中含有NA的行?
如何删除嵌套数据框中含有NA的行?
可能的重复问题:
我有一个嵌套的数据框,大约有400个文件,每个文件约有65k行。我想从嵌套的数据框df中删除所有包含NA的行。我尝试了na.omit(df)
,但似乎没有起作用。我不确定是否有遗漏了什么。谢谢。
df [[1]] V1 V2 V3 1 ID SignalIntensity SNR 2 109 6.1823089314 0.8453576915 3 110 10.1727771385 4.3837077591 4 111 7.2922746927 NA 5 112 8.8984671629 2.3192184908 6 113 NA 3.7133402249 7 114 7.9850187685 1.5008899345 8 116 7.7893230124 NA 9 117 7.1948346495 1.134973824 10 118 6.5727729751 0.9041846475 11 119 NA 0.7098581049 12 120 9.3711264685 2.9968456969 13 121 6.1549436434 0.7777584058 [[2]] V1 V2 V3 1 ID SignalIntensity SNR 2 118 6.5727729751 0.9041846475 3 119 5.3775194293 NA 4 120 9.3711264685 2.9968456969 5 121 6.1549436434 0.7777584058 6 123 5.7974462402 0.7235424803 7 124 NA 0.7019574482 8 125 7.0145371807 0.343334334 9 126 6.0891591319 0.797164982 10 127 6.3148197657 0.7845943688 [[3]] V1 V2 V3 1 ID SignalIntensity SNR 2 109 6.1823089314 0.8453576915 3 110 10.1727771385 4.3837077591 4 111 7.2922746927 1.0725751161 5 112 8.8984671629 NA 6 113 9.5910338232 3.7133402249 7 114 7.9850187685 1.5008899345 8 116 7.7893230124 1.3636655582 9 117 7.1948346495 NA 10 118 6.5727729751 0.9041846475 11 119 5.3775194293 0.7098581049 12 120 9.3711264685 2.9968456969
我的最终数据应该是这样的。
df [[1]] V1 V2 V3 1 ID SignalIntensity SNR 2 109 6.1823089314 0.8453576915 3 110 10.1727771385 4.3837077591 5 112 8.8984671629 2.3192184908 6 113 9.5910338232 3.7133402249 7 114 7.9850187685 1.5008899345 9 117 7.1948346495 1.134973824 10 118 6.5727729751 0.9041846475 12 120 9.3711264685 2.9968456969 13 121 6.1549436434 0.7777584058 [[2]] V1 V2 V3 1 ID SignalIntensity SNR 2 118 6.5727729751 0.9041846475 4 120 9.3711264685 2.9968456969 5 121 6.1549436434 0.7777584058 6 123 5.7974462402 0.7235424803 8 125 7.0145371807 0.343334334 9 126 6.0891591319 0.797164982 10 127 6.3148197657 0.7845943688 [[3]] V1 V2 V3 1 ID SignalIntensity SNR 2 109 6.1823089314 0.8453576915 3 110 10.1727771385 4.3837077591 4 111 7.2922746927 1.0725751161 6 113 9.5910338232 3.7133402249 7 114 7.9850187685 1.5008899345 8 116 7.7893230124 1.3636655582 9 117 7.1948346495 1.134973824 10 118 6.5727729751 0.9041846475 11 119 5.3775194293 0.7098581049 12 120 9.3711264685 2.9968456969
问题的出现原因:在处理嵌套数据框时,有时会遇到包含缺失值(NA)的行,而我们需要将这些行从数据框中删除。
解决方法:可以使用purrr
库的na.omit
函数来删除包含NA的行。另一种方法是在map
函数中创建一个匿名函数来删除包含NA的行。如果希望保留NA记录以供后续调查(这是一个很好的做法),可以使用!
运算符来删除包含NA的行。最后,如果主要关注进行计算,可以考虑将所有的NA替换为0。
代码如下:
# 使用na.omit删除包含NA的行 map(df, na.omit) # 使用匿名函数删除包含NA的行 map(df, ~(.x %>% filter(complete.cases(.)))) # 使用匿名函数保留包含NA的行 map(df, ~(.x %>% filter(!complete.cases(.)))) # 将所有NA替换为0 map(df, ~replace(., is.na(.), 0))
以上就是关于如何删除嵌套数据框中包含NA的行的解决方法。通过使用purrr
库的na.omit
函数或创建匿名函数,并结合filter
和replace
函数,我们可以轻松地处理包含NA的行。
问题的原因是在一个嵌套的数据框中删除包含NA值的行。解决方法是使用lapply函数对数据框列表进行操作,使用na.omit函数删除包含NA值的行。另外观察到数据框列表的第一行是字符型数据。假设你在使用read.table函数时将header参数设置为FALSE,而实际上数据框列表中有表头。可能需要重新读取文件并设置header参数为TRUE,同时设置stringsAsFactors参数为FALSE。代码如下:
df <- list(data.frame(a=c(1,2,NA), b=c(NA,5,6)), data.frame(c=c(NA,8,9), d=c(10,11,NA))) lapply(df, na.omit) files <- list.files() #如果所有文件都在当前工作目录中 lst <- lapply(files, read.table, header=TRUE, stringsAsFactors=FALSE) lapply(lst, na.omit)
以上代码将删除df中包含NA值的行,并重新读取文件lst并删除包含NA值的行。