【发布时间】:2023-03-10 01:51:01
【问题描述】:
我正在处理一个包含时间列和风速列的大型数据集。我需要找到一种方法来根据时间列将数据帧分成更小的段。如果我的数据框是
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
如果我需要输出四个数据帧,那么我会
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
我想我需要一个包含 split() 和 subset() 的函数,但我不确定如何构建它。我在想一些类似的事情
function( full data frame,number of segments I need) {
split(full data frame, subset(time segments))
return(appropriate amount of smaller data frames)
}
有没有办法做到这一点,或者比制作函数更好的方法?我找到了显示较小数据帧的方法,但理想情况下我希望它们以 df1、df2、df3 之类的名称返回......所以我可以在它们输出后单独处理它们
【问题讨论】:
-
我想出了这个
split(df1, (cumsum(!duplicated(df1$hrmin))-1)%/%n+1)如果我们指定n <-1,它将被每个唯一的hrmin分割,变为n <- 2,由两个'hrmin' 分割,与您的输出相同。但是正如前面在 cmets 中提到的@Frank,假设如果你有 5 个唯一的 'hrmin',你想如何除以 3。在上述方法中,它首先将 3 个唯一的 hrmin 拆分为一个列表元素,并将 2 个拆分为下一个列表元素。 -
我在示例中使用了 3 hrmin,但我的真实数据集有更多。每个组都需要由 hrmin 标识。我需要将所有 1100 和 1101 的 hrmin 分配给 df1,并将所有 1102 和 1103 的 hrmin 分配给 df2。我认为@Frank 提供了一个很好的观点,并且能够为我指明正确的方向
-
@user2113499 仅供参考,除非您正在并行化您的计算(使用您的计算机和花哨/高级工具同时在多个 data.frames 上运行计算),否则您可能不想拆分data.frame 以这种方式向上。
-
所以数据是 20 赫兹,但我让我的时间只显示小时和分钟,我想做的是取某些时间范围的平均值。因此,在一个数据框中,我可以拥有所有 1100 和 1101 数据点,而在另一个 df 中,我有 1102 和 1103。对于每个 df,我将取平均风速。然后我会再次这样做,但使用 4 个数据帧。这是为了证明选择正确的平均时间尺度的重要性。
-
没有必要为此设置单独的数据框。您可以为每个案例创建一个分组变量,然后使用
aggregate或 data.table 或 dplyr 包对其进行聚合。如果您发布的内容更像您的应用程序(在单独的问题中),我敢打赌有人可以提供帮助。