R 数据的滚动子集。滚动统计表
我有一个奇怪的问题,我知道我可以用apply或其他一些循环结构来解决,但我觉得应该有一个非常聪明的方法来做到这一点。我有一个data.table示例_dt,我从中提取了两个id列,以形成一个名为id_dt的id data.table。然后我想使用这些id索引到示例_dt中来计算一些统计数据。诀窍是第一个id id1需要匹配。第二个id id2只需要在一定范围内。我重命名id_dt中的列以避免命名冲突。我不完全确定data.table中的作用域发生了什么 我想要的是:R 数据的滚动子集。滚动统计表,r,data.table,R,Data.table,我有一个奇怪的问题,我知道我可以用apply或其他一些循环结构来解决,但我觉得应该有一个非常聪明的方法来做到这一点。我有一个data.table示例_dt,我从中提取了两个id列,以形成一个名为id_dt的id data.table。然后我想使用这些id索引到示例_dt中来计算一些统计数据。诀窍是第一个id id1需要匹配。第二个id id2只需要在一定范围内。我重命名id_dt中的列以避免命名冲突。我不完全确定data.table中的作用域发生了什么 我想要的是: id1 id2 x1 me
id1 id2 x1 mean
a 1 1 1
a 2 2 1.5
a 3 1 1.333333333
a 4 2 1.666666667
a 5 1 1.333333333
a 6 2 1.666666667
a 7 1 1.333333333
b 1 2 2
b 2 1 1.5
b 3 2 1.666666667
b 4 1 1.333333333
b 5 2 1.666666667
b 6 1 1.333333333
b 7 2 1.666666667
正如我所说,我知道我可以用apply或其他一些循环结构来实现。我想看看是否有一些聪明的数据。我不知道的表格咒语。谢谢你的帮助 这里有一种使用滚动联接的方法:
也可以使用foverlaps完成,但这似乎有点过分了。我建议您在roll参数处查看?data.table,如果您无法掌握这一点,请在此处使用示例。。直到连接的渐晕图完成。有关其他小插曲,请查看页面。对于计划的小插曲,请查看
这已经出现了很多次,这可能值得在data.table中的函数之间进行转换,以便能够有效地执行此操作。我想在项目页面的某个地方有一个FR
至于为什么会得到一个单一的值,您正在执行DT[rows,meancol],它的内容是。。为行中指定的行提取列,并计算其平均值。这应该返回一个值。这里有一种使用滚动联接的方法:
也可以使用foverlaps完成,但这似乎有点过分了。我建议您在roll参数处查看?data.table,如果您无法掌握这一点,请在此处使用示例。。直到连接的渐晕图完成。有关其他小插曲,请查看页面。对于计划的小插曲,请查看
这已经出现了很多次,这可能值得在data.table中的函数之间进行转换,以便能够有效地执行此操作。我想在项目页面的某个地方有一个FR
至于为什么会得到一个单一的值,您正在执行DT[rows,meancol],它的内容是。。为行中指定的行提取列,并计算其平均值。这应该返回一个值。您期望的结果中的平均值发生了什么变化?是否存在分组变量或滚动平均值等?我已将您的代码修改为计算平均值的部分。您期望的结果中的平均值发生了什么变化?是否存在分组变量或滚动平均值等?我已将您的代码修改为计算平均值的部分谢谢您的回答。我正在绞尽脑汁弄清楚语法的确切含义。我已经习惯于使用dplyr进行此类工作,但它不适用于此场景。谢谢您的回答。我正在绞尽脑汁弄清楚语法的确切含义。我习惯于使用dplyr来完成这种工作,但它在这种情况下不起作用。
> result_dt
[1] 1.5
id1 id2 x1 mean
a 1 1 1
a 2 2 1.5
a 3 1 1.333333333
a 4 2 1.666666667
a 5 1 1.333333333
a 6 2 1.666666667
a 7 1 1.333333333
b 1 2 2
b 2 1 1.5
b 3 2 1.666666667
b 4 1 1.333333333
b 5 2 1.666666667
b 6 1 1.333333333
b 7 2 1.666666667
setkey(example_dt, id1, id2)
idx1 = example_dt[.(id1, id2-2), roll=-Inf, which=TRUE]
idx2 = example_dt[.(id1, id2), roll=Inf, which=TRUE]
mapply(function(x,y) mean(example_dt$x1[x:y]), idx1, idx2)
# [1] 1.000000 1.500000 1.333333 1.666667 1.333333 1.666667 1.333333 2.000000 1.500000
# [10] 1.666667 1.333333 1.666667 1.333333 1.666667