基于 R 中的其他列创建列
Creating a column based on other columns in R
我是 R 的新手,但我想根据其他 2 列(日期列)在我的数据框中创建一个新列。我有一个编码为 (1, 2, 3) 和 2 个日期列的分组变量。
以下是我的新专栏的条件:
- 如果分组列 == 1,那么它应该从 date1 列返回相应的日期(按行)
- 如果分组列 == 2,那么它应该从 date2 列取回日期
- 如果分组列 == 3,那么它应该返回 2 个日期列之间的 earliest/first 日期
我尝试了 case_when 和 if_else 但没有成功。如有任何帮助,我们将不胜感激。
我尝试了 case-when 和 if_else 但出现了错误
这是 case_when
的方法。
set.seed(2022)
d <- seq(as.Date("2022-01-01"), Sys.Date(), by = "day")
df1 <- data.frame(
group = sample(3, 20, TRUE),
date1 = sample(d, 20),
date2 = sample(d, 20)
)
suppressPackageStartupMessages(library(dplyr))
df1 %>%
mutate(newdate = case_when(
group == 1 ~ date1,
group == 2 ~ date2,
TRUE ~ pmin(date1, date2)
)) %>% head
#> group date1 date2 newdate
#> 1 3 2022-01-29 2022-02-25 2022-01-29
#> 2 2 2022-01-12 2022-01-01 2022-01-01
#> 3 3 2022-03-20 2022-01-19 2022-01-19
#> 4 3 2022-03-01 2022-03-01 2022-03-01
#> 5 2 2022-02-13 2022-02-19 2022-02-19
#> 6 3 2022-03-11 2022-02-10 2022-02-10
由 reprex package (v2.0.1)
于 2022-03-24 创建
我不是 100% 确定在组变量为 3 的情况下这是否是您想要的,但它会比较早的日期增加一天。
df <- data.frame(group = c(1:3),
date1 = c(01-02-99, 01-02-99,1-02-99),
date2 = c(04-02-99, 04-02-99,04-02-99)
)
df$date1 <- as.Date(df$date1)
df$date2 <- as.Date(df$date2)
df <- df %>% mutate(col3 = case_when(
group == 1 ~ date1,
group == 2 ~ date2,
group == 3 & date1 > date2 ~ date2+1,
group == 3 & date2 > date1 ~ date1+1
))
我是 R 的新手,但我想根据其他 2 列(日期列)在我的数据框中创建一个新列。我有一个编码为 (1, 2, 3) 和 2 个日期列的分组变量。 以下是我的新专栏的条件:
- 如果分组列 == 1,那么它应该从 date1 列返回相应的日期(按行)
- 如果分组列 == 2,那么它应该从 date2 列取回日期
- 如果分组列 == 3,那么它应该返回 2 个日期列之间的 earliest/first 日期
我尝试了 case_when 和 if_else 但没有成功。如有任何帮助,我们将不胜感激。
我尝试了 case-when 和 if_else 但出现了错误
这是 case_when
的方法。
set.seed(2022)
d <- seq(as.Date("2022-01-01"), Sys.Date(), by = "day")
df1 <- data.frame(
group = sample(3, 20, TRUE),
date1 = sample(d, 20),
date2 = sample(d, 20)
)
suppressPackageStartupMessages(library(dplyr))
df1 %>%
mutate(newdate = case_when(
group == 1 ~ date1,
group == 2 ~ date2,
TRUE ~ pmin(date1, date2)
)) %>% head
#> group date1 date2 newdate
#> 1 3 2022-01-29 2022-02-25 2022-01-29
#> 2 2 2022-01-12 2022-01-01 2022-01-01
#> 3 3 2022-03-20 2022-01-19 2022-01-19
#> 4 3 2022-03-01 2022-03-01 2022-03-01
#> 5 2 2022-02-13 2022-02-19 2022-02-19
#> 6 3 2022-03-11 2022-02-10 2022-02-10
由 reprex package (v2.0.1)
于 2022-03-24 创建我不是 100% 确定在组变量为 3 的情况下这是否是您想要的,但它会比较早的日期增加一天。
df <- data.frame(group = c(1:3),
date1 = c(01-02-99, 01-02-99,1-02-99),
date2 = c(04-02-99, 04-02-99,04-02-99)
)
df$date1 <- as.Date(df$date1)
df$date2 <- as.Date(df$date2)
df <- df %>% mutate(col3 = case_when(
group == 1 ~ date1,
group == 2 ~ date2,
group == 3 & date1 > date2 ~ date2+1,
group == 3 & date2 > date1 ~ date1+1
))