r语言 - 数据帧太大,是否有替代方案



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

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

有什么方法可以实现我想做的事情吗?

我想

你可以尝试使用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 ]

相关内容

最新更新