如何删除嵌套数据框中含有NA的行?

18 浏览
0 Comments

如何删除嵌套数据框中含有NA的行?

可能的重复问题:

删除数据框中包含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

0
0 Comments

问题的出现原因:在处理嵌套数据框时,有时会遇到包含缺失值(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函数或创建匿名函数,并结合filterreplace函数,我们可以轻松地处理包含NA的行。

0
0 Comments

问题的原因是在一个嵌套的数据框中删除包含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值的行。

0