【发布时间】:2017-05-24 04:40:31
【问题描述】:
我正在处理一个非常大的大型数据帧列表 (~2GB)。为了节省空间和减小文件大小,我想删除列表中的一些元素,这些元素都是NA。作为操作的一部分,我需要 gather 然后绑定到单个 data.frame。
这是一个例子:
library(tidyr)
library(dplyr)
a <- data.frame(x=rep(1,3), y1=1:3, y2=1:3)
b <- data.frame(x=rep(2,3), y1=NA, y2=NA)
c <- data.frame(x=rep(3,3), y1=1:3, y2=NA)
l <- list(a,b,c)
t <- lapply(l, function(x){
gather(x, key="type", value="value", -x) # %>%
#remove list element here %>%
#do other operations like mutate here
}) %>%
bind_rows
这样的结果包括一些 data.frames 都是 NA 对于我的值 y。
我想从列表中完全删除元素。如果使用NA 删除所有行,它仍然会留下一个空列表元素,然后使用mutate 或其他操作使进一步计算崩溃。
我正在尝试通过第一次调用 lapply 来处理此操作,因为我发现在那之后进行过滤需要大量内存(在我在这台计算机上使用 16GB 后经常崩溃)。在标题中,当我说“列表”时,我指的是 apply 声明。
在此示例中,结果应如下所示:
> t[-(7:12),]
x type value
1 1 y1 1
2 1 y1 2
3 1 y1 3
4 1 y2 1
5 1 y2 2
6 1 y2 3
13 3 y1 1
14 3 y1 2
15 3 y1 3
16 3 y2 NA
17 3 y2 NA
18 3 y2 NA
【问题讨论】: