Функция для разделения фрейма данных на сегменты в R
Я работаю с большим набором данных, который имеет столбец времени и столбец скорости ветра. Мне нужно найти способ разделить фрейм данных на более мелкие сегменты, основанные на временном столбце. если мой фрейм данных
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... чтобы я мог работать с ними индивидуально после того, как они выведут
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
является идентификатором для переменной группировки, считая1..uniqueN(DT$hrmin)
,