我正在使用具有时间列和风速列的大型数据集。我需要找到一种方法,根据时间组合将数据帧划分为更小的段。如果我的数据框是
In [89]: x=[1,2,3]
In [91]: x<3
Out[91]: False
In [92]: x=np.array(x)
In [93]: x<3
Out[93]: array([ True, True, False], dtype=bool)
我需要一个函数将它分成更小的段然后输出这些段。如果我想将它分成两段,那么我的结果就是
hrmin wind
1100 x1
1100 x2
1100 x3
1101 x4
1101 x5
1101 x6
1102 x7
1102 x8
1102 x9
1103 x10
1103 x11
1103 x12
如果我需要输出四个数据帧,那么我会
df1
1100 x1
1100 x2
1100 x3
1101 x4
1101 x5
1101 x6
df2
1102 x7
1102 x8
1102 x9
1103 x10
1103 x11
1103 x12
我想我需要一个包含split()和subset()的函数,但我不知道如何构建它。
我正在思考一些事情df1
1100 x1
1100 x2
1100 x3
df2
1101 x4
1101 x5
1101 x6
df3
1102 x7
1102 x8
1102 x9
df4
1103 x10
1103 x11
1103 x12
有没有办法做到这一点,或者比制作一个功能更好?我找到了显示较小数据帧的方法,但理想情况下我希望它们返回的名称如df1,df2,df3 ...所以我可以在输出后单独处理它们
答案 0 :(得分:1)
这与@ akrun的答案非常相似(可能目前已删除):
library(data.table)
setDT(DT)
DT[, g := .GRP, by=hrmin]
split(DT, findInterval(
DT$g,
seq(1, uniqueN(DT$hrmin), length.out = n + 1),
rightmost.closed = TRUE
))
它按顺序拆分组,只是基于组的数量(并忽略每组中的行数)。您可以更改n
以查看其工作原理。将它放入函数中非常简单。没有data.table
,这也不难做到;它只是用于它的漂亮快捷方式:
uniqueN(DT$hrmin)
是分组变量的值数。.GRP, by=hrmin
是分组变量的ID,计为1..uniqueN(DT$hrmin)
。