我有一个包含以下列的数据框:
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
有没有办法实现我想做的事情?
答案 0 :(得分:0)
我猜您可以尝试使用sqldf
或data.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 ]