>我有一个包含以下列的数据帧:
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
有什么方法可以实现我想做的事情吗?
我想使用
使用
你可以尝试使用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 ]