我有一个非常大的数据集,我已经将它分成了50个 所以基本上文件看起来像: 文件1 文件2 文件3 。 。 。 file50(数据框)
file_total <- c(file1,...,file50)
我知道这会把它合并到一个列表中,但我不能使用rbind
,因为整个所有数据都很庞大,而plyr库只需要永远运行
在每个文件中,我必须根据1个因素对它们进行拆分,将其命名为&#34; id&#34;,然后能够将每个id子集写入.csv文件
到目前为止,我的代码是:
d_split <- split(file1, file1[1])
library(plry)
id <- unlist(lapply(d_split,"[",1,1)) # this returns the unique id
for (j in seq_along(id))
{
write.csv(d_split[[j]], file=paste(id[j], "csv", sep="."))
}
这有效!!
但是当我尝试将它放入另一个for循环时,它不起作用:
for (i in file_total)
{
d_split <- split(i, i[1])
id <- unlist(lapply(d_split,"[",1,1))
for (j in seq_along(id))
{
write.csv(d_split[[j]], file=paste(id[j], "csv", sep="."))
}
}
它返回以下错误消息:
Error in FUN(X[[1L]], ...) : incorrect number of dimensions
我的意思是我可以通过复制并将50个文件粘贴到代码中来手动完成,但只是想知道是否有人可以修复我的代码,以便一次点击就可以解决它。
答案 0 :(得分:3)
根据您组合数据的方式出现问题。不要将它们与c
组合,而是将它们放入列表中:
file_total <- list(file1,...,file50)
此时,执行i in file_total
将按您的意愿进行迭代。
作为解释:对数据框使用c
(因为我假设file1
和file2
是),实际上会将它们转换为向量列表而不是数据列表帧。例如:
file1 = data.frame(x=1:20)
file2 = data.frame(y=20:40)
file_total = c(file1, file2)
# file_total will be:
# $x
# [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
#
# $y
# [1] 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
因此,迭代它们实际上会迭代各个列作为向量。但是,使用list
组合它们可以让您遍历数据框本身:
> list(file1, file2)
[[1]]
x
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14
15 15
16 16
17 17
18 18
19 19
20 20
[[2]]
y
1 20
2 21
3 22
4 23
5 24
6 25
7 26
8 27
9 28
10 29
11 30
12 31
13 32
14 33
15 34
16 35
17 36
18 37
19 38
20 39
21 40