如何根据R中的日期拆分数据框架?


x1<- split(df, cumsum(df$Date < 1900-01-01))
x2<- split(df, cumsum(df$Date >= 1945-01-01 & df$Date <= 1955-01-01))
x3<- split(df, cumsum(df$Date > 2000-01-01))

我正试图根据上述条件拆分数据帧。然而,这些函数只适用于第一个,而不适用于其他两个。

这是数据帧df的样子

Date       T_min T_max
<chr>      <dbl> <dbl>
1 1878-01-01   6.4  22.5
2 1878-01-02   8.2  23.4
3 1878-01-03   8.8  25  
4 1878-01-04   8    24.5
5 1878-01-05   7.8  22.4
6 1878-01-06   7.9  20.8
7 1878-01-07   7    21.5
8 1878-01-08   7.7  21.4
9 1878-01-09  10    18.5
10 1878-01-10   7.3  19.3 

让我们以以下示例为例:

df <- data.frame(V1 = c("1800-01-01","1950-01-01","2005-01-01"))
df <- df %>% 
mutate(V1 = as.Date(V1))
V1
1 1800-01-01
2 1950-01-01
3 2005-01-01

代码:

library(tidyverse)
df <- df %>% 
mutate(indic = case_when(
V1 < "1900-01-01" ~ 1,
V1 >= "1945-01-01" & V1 <= "1955-01-01" ~ 2,
V1 > "2000-01-01" ~ 3,
TRUE ~ 4
)) 
list_of_df <- split(df, df$indic)
i = 1
MyF <- function(input){
out <- as.data.frame(input)
out <- out %>% select(-indic)
nom <- paste0("dfE",i)
assign(nom, out, envir = .GlobalEnv)
i <<- i + 1
}
lapply(list_of_df, MyF)

这将根据您首先使用的条件(关于日期)在您的环境中创建dfE1dfE2dfE3数据帧。

> dfE1
V1
1 1800-01-01

> dfE2
V1
2 1950-01-01

> dfE3
V1
3 2005-01-01

相关内容

  • 没有找到相关文章

最新更新