【问题标题】:Create a user generated function in R which creates a new column of dates based on values from other columns在 R 中创建一个用户生成的函数,该函数根据其他列的值创建一个新的日期列
【发布时间】:2021-02-21 13:07:48
【问题描述】:

假设这些是我的数据集的前几列:

library(tidyverse)

df <- tibble(Year = rep(2020, times = 5),
             Month = seq(1:5),
             DayOfMonth = seq(1:5),
             DayOfWeek = seq(1:5))

# A tibble: 5 x 4
   Year Month DayOfMonth DayOfWeek
  <dbl> <int>      <int>     <int>
1  2020     1          1         1
2  2020     2          2         2
3  2020     3          3         3
4  2020     4          4         4
5  2020     5          5         5

目前日期被分成不同的列,如上。我想创建一个函数,该函数从数据集中每一行的每个相关列中获取值,并添加一个新列,将这些值组合成yyyy/mm/dd 格式。

例如,我希望第一行在新的“日期”列中具有对应的值,即 2020/01/01(与 2020 年 1 月 1 日相同)

由于我是 R 新手,所以我对自己制作函数没有很好的理解,所以我很难找到一个起点。非常感谢任何帮助:)

【问题讨论】:

    标签: r function date tidyverse


    【解决方案1】:

    应该这样做

    library(tidyverse)
    
    df <- tibble(Year = rep(2020, times = 5),
                 Month = seq(1:5),
                 DayOfMonth = seq(1:5),
                 DayOfWeek = seq(1:5))
    
    
    out <-  apply(df, MARGIN = 1, paste, collapse="/")
    
    [1] "2020/1/1/1" "2020/2/2/2" "2020/3/3/3" "2020/4/4/4" "2020/5/5/5"
    

    applymargin = 1 遍历每一行并使用 paste 函数折叠行向量并放置一个“/”代替

    编辑:“DayOfWeek”是怎么回事,也许应该删除,或者只运行apply(df[,1:3], MARGIN = 1, paste,collapse="/")

    out <-  apply(df[,1:3], MARGIN = 1, paste,collapse="/")
    test <- as.Date(out)
    
    test
    [1] "2020-01-01" "2020-02-02" "2020-03-03" "2020-04-04" "2020-05-05"
    

    【讨论】:

    • 感谢您的回答,但您的函数输出不是 yyyy/mm/dd 格式。我不希望将 DayOfWeek 列附加到末尾,因为那不是我可以使用的日期。
    • 更新了我的答案,但我想,也许您还需要验证日期?
    • 谢谢,编辑有帮助。我将您的“测试”重命名为“日期”,并使用 df %&gt;% mutate(Date) 将其添加到 df。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-18
    • 2018-05-27
    相关资源
    最近更新 更多