基于 R 中的其他列创建列

发布于 2025-01-16 20:12:10 字数 322 浏览 1 评论 0原文

我对 R 非常陌生,但我想根据其他 2 列(日期列)在数据框中创建一个新列。我有一个编码为 (1, 2, 3) 的分组变量和 2 个日期列。 以下是我的新列的条件:

  • 如果分组列 == 1,那么它应该从 date1 列返回相应的日期(按行)
  • 如果分组列 == 2,那么它应该从 date2 返回日期 如果分组列
  • == 3,那么它应该带回

我尝试过 case_when 和 if_else 但没有取得任何成功的 2 个日期列之间的最早/第一个日期。任何帮助将不胜感激。

我尝试了 case-when 和 if_else 但出现错误

I`m very new to R but I would like to create a new column in my data frame based on 2 other columns (date columns). I have a grouping variable coded (1, 2, 3) and 2 date columns.
Below are the conditions for my new column:

  • If grouping column == 1, then it should bring back the corresponding date (row-wise) from the date1 column
  • If grouping column == 2, then it should bring back the date from the date2 column
  • If grouping column == 3, then it should bring back the earliest/first date between the 2 date columns

I have tried case_when and if_else but have not had any success. Any assistance will be greatly appreciated.

I tried case-when and if_else but got errors

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

长安忆 2025-01-23 20:12:10

在组变量为 3 的情况下,我不能 100% 确定这是否是您想要的,但它会为较早的日期添加一天。


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
))


I'm not 100% sure if this is what you wanted in the case where the group variable is 3, but it adds a day to the earlier date.


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
))


眼睛会笑 2025-01-23 20:12:10

这是 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 软件包 (v2.0.1) 创建于 2022 年 3 月 24 日

Here is a way with 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

Created on 2022-03-24 by the reprex package (v2.0.1)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文