繁体   English   中英

在 r 中按日期拆分 dataframe

[英]Split the dataframe by date in r

我有一个数据集,它有一个日期列和一个数据列。

每个日期的行数可能不一样,有的可能只有 10 行而不是 24 行。 数据集是这样的:

日期 小时 价值
2000 年 10 月 6 日 1 4
2 5
3 7
4 7
5 8
6 1
7 7
8 2
9 3
10 4
11 5
12 7
13 8
14 9
15 10
16 12
17 1
18 4
19 7
20 9
21 10
22 7
23 8
24 9
2000 年 11 月 6 日 9 1
10 4
11 5
12 7
13 8
14 9
15 10
16 12
17 1
18 4
19 7
20 9
21 10
22 7
23 8
24 9

我想按日期将数据集拆分为多个数据框。 但是,在 date 变量中,两个日期之间的元素为空。 当我尝试在基础 r 中使用拆分 function 时,function 仅返回每个日期的第一行:

$`2000-06-11`
            V1 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16
264 2000-06-11 2  7  8  3   2   3   4   7   4   5   8

$`2000-06-12`
            V1 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16
278 2000-06-12 2  2  9  6   2   3   1   0   1   4   4

抱歉问了这么简单的问题,我尝试使用for循环来处理这个问题,但是数据集太大,运行速度很慢。

如果您确定数据以正确的顺序排序,则可以使用tidyr::fill

library(tidyr)

df <- data.frame(
  Date = c("10-06-2000", rep(NA, 5), "11-06-2000", rep(NA, 12)),
  hour = c(4:9, 1:13),
  value = 1:19
  )

df_filled <- fill(df, Date, .direction = "down")

split(df_filled, df_filled$Date)


$`10-06-2000`
        Date hour value
1 10-06-2000    4     1
2 10-06-2000    5     2
3 10-06-2000    6     3
4 10-06-2000    7     4
5 10-06-2000    8     5
6 10-06-2000    9     6

$`11-06-2000`
         Date hour value
7  11-06-2000    1     7
8  11-06-2000    2     8
9  11-06-2000    3     9
10 11-06-2000    4    10
11 11-06-2000    5    11
12 11-06-2000    6    12
13 11-06-2000    7    13
14 11-06-2000    8    14
15 11-06-2000    9    15
16 11-06-2000   10    16
17 11-06-2000   11    17
18 11-06-2000   12    18
19 11-06-2000   13    19

您还可以将group_split()fill()结合使用:

library(tidyr)
library(dplyr)
df <- data.frame(
  Date = c("10-06-2000", rep(NA, 5), "11-06-2000", rep(NA, 12)),
  hour = c(4:9, 1:13),
  value = 1:19
)

df_filled <- df |> 
  fill(Date, .direction = "down") |> 
  group_split(Date) |> 
  purrr::set_names(unique(df$Date)[!is.na(unique(df$Date))])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM