Dataframe对于合并来说太大了 - 还有其他选择吗?

时间:2016-05-24 12:30:42

标签: r merge large-data

我有一个包含以下列的数据框:

id condition trial   a0   a1 ... a7   b1   b2 ... b7
 1      1      1     23   56 ... 52   87   56 ... 98
 1      1      2     57   87 ... 87   55   52 ... 52
 1      1      3     23   56 ... 52   87   56 ... 98
 2      1      1     23   56 ... 82   97   56 ... 68

a和b是在时间0,1 ...处测量的值.7。测量a值为0而b没有。

我希望以下列格式提供:

id condition trial time measureA  measureB
 1     1      1     0       23      NA
 1     1      2     0       57      NA
 1     1      3     0       23      NA
 ...
 1     1      1     1       56      87
 1     1      2     1       87      55 
 ...

换句话说,我有一个7秒的时间序列,用于分散2 * 7列的2个度量,我想收集"收集"他们在一个列中。其中一个在时间0也有一个值。

这是我到目前为止所尝试的:

我使用了函数gather

x = gather(x, timeA, measureA, -c(1:3, 4:11))
x = gather(x, timeB, measureB, -c(1:3, 10,11))

并且可以将数据帧放在以下格式中:

id condition trial    timeA  measureA   timeB  measureB
                         0       12       1       45
                         0       52       1       85
                         1       51       2       55
                         1       45       2       92
                         2       45       3       15
                         2       52       3       54

我想使用merge来合并timeA和timeB,但它不起作用,因为数据框太大了。

我使用了代码:

merge(x[1:5], x[6:7], by.x="timeA", by.y = "timeB")

我收到错误消息

Error: cannot allocate vector of size 40980.3 Gb

有没有办法实现我想做的事情?

1 个答案:

答案 0 :(得分:0)

我猜您可以尝试使用sqldfdata.table。你能在问题中提供更多信息吗?样本数据?你正在尝试什么样的合并(左连接?)

library(sqldf)
library(data.table)

使用sqldf

sqldf = sqldf("SELECT * FROM df1 LEFT OUTER JOIN df2 ON df1.x = df2.x")

使用data.table

data.table = dt1[dt2, nomatch = 0L, on = "x",  allow.cartesian=TRUE ]