可能重复:
Remove rows with NAs (missing values) in data.frame
How to remove "rows" with a NA value?
我有一个嵌套的数据框,包含约400行的大约400个文件。我想从嵌套数据框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 :(得分:6)
df
是' data.frames'的列表。因此,您可以使用lapply
lapply(df, na.omit)
观察到的另一件事是数据框列表中的第一行是'字符'。我假设您使用read.table
header=FALSE
,而标题实际上就在那里。可能是,您需要使用
files <- list.files #if all the files are in the working directory
lst <- lapply(files, read.table, header=TRUE, stringsAsFactors=FALSE)
lapply(lst, na.omit)
答案 1 :(得分:0)
purrr
库也可以与na.omit
一起使用
map(df, na.omit)
另一种方法是在地图中创建匿名函数,如
map(df, ~(.x %>% filter(complete.cases(.))))
如果您想保留NA记录以供以后调查(一种很好的做法),那么最后的迭代可能会很有用。只需为具有NA的任何行添加not !
限定词,即可:
map(df, ~(.x %>% filter(!complete.cases(.))))
最后,如果您最关心的是进行计算,则可以考虑将所有NA替换为0:
map(df, ~replace(., is.na(.), 0) )