用于将数据帧划分为R中的段的功能

时间:2015-09-02 15:38:47

标签: r subset

我正在使用具有时间列和风速列的大型数据集。我需要找到一种方法,根据时间组合将数据帧划分为更小的段。如果我的数据框是

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 ...所以我可以在输出后单独处理它们

1 个答案:

答案 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)