我正在尝试解决的问题是:假设我有两个数据框,如下所示:
observations <- data.frame(id = rep(rep(c(1,2,3,4), each=5), 5),
time = c(rep(1:5,4), rep(6:10,4), rep(11:15,4), rep(16:20,4), rep(21:25,4)),
measurement = rnorm(100,5,7))
sampletimes <- data.frame(location = letters[1:20],
id = rep(1:4,5),
time1 = rep(c(2,7,12,17,22), each=4),
time2 = rep(c(4,9,14,19,24), each=4))
它们都包含名为
id
的列,用于链接数据框。我想从sampletimes
数据框中获取time1
和time2
之间的observationss
的measurement
。此外,我想将适当的location
连接到每个测量值。我已经成功地将我的
sampletimes
转换为宽格式(即每个条目的所有time1
和time2
信息在一行中),通过id
变量合并两个数据框,并使用条件语句仅在时间间隔中的至少一个时间段内才采取实例,然后将location
分配给适当的测量值。然而,我的
observations
表格中有大约200万行数据,这样做需要很长时间。我正在寻找一种更好的方法来保持数据的长格式。示例数据集非常简单,但实际上,我的数据包含每个id
的可变数量的间隔和位置。对于我们的示例,我希望得到的数据框如下:
id time measurement letters[1:20]
1 3 10.5163892 a
2 3 5.5774119 b
3 3 10.5057060 c
4 3 14.1563179 d
1 8 2.2653761 e
2 8 -1.0905546 f
3 8 12.7434161 g
4 8 17.6129261 h
1 13 10.9234673 i
2 13 1.6974481 j
3 13 -0.3664951 k
4 13 13.8792198 l
1 18 6.5038847 m
2 18 1.2032935 n
3 18 15.0889469 o
4 18 0.8934357 p
1 23 3.6864527 q
2 23 0.2404074 r
3 23 11.6028766 s
4 23 20.7466908 t
Error: evaluation nested too deeply: infinite recursion / options(expressions=)?
。我尝试的每个其他命令都产生了相同的错误消息。 - Jotadata.table
不支持POSIXlt。一旦我将我的时间列转换为POSIXct,它就可以工作了。 - JotaPOSIXct
,它是数字类型。POSIXlt
是一个列表,只在想要对日期时间进行子集操作时使用(获取小时、天、月等)。 - agstudy