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)
这将根据您首先使用的条件(关于日期)在您的环境中创建dfE1
、dfE2
和dfE3
数据帧。
> dfE1
V1
1 1800-01-01
> dfE2
V1
2 1950-01-01
> dfE3
V1
3 2005-01-01