如何将三个变量合并为一个变量,该变量表示由逗号分隔的合并变量?

时间:2017-11-20 18:30:51

标签: r variables merge

我有三个变量:年,月和日。如何将它们合并为一个变量(" Date"),以便将变量表示为: YYYY-MM-DD

提前致谢和最诚挚的问候!

2 个答案:

答案 0 :(得分:0)

下面我们创建年 - 月 - 日字符串,yyyy-mm-dd字符串(类似的除了一个月的数字和日期,零填充到2位数)和Date类。最后一个打印为yyyy-mm-dd,可以用字符串不能的方式进行操作,例如在Date类对象中添加一个给出第二天。

首先我们设置一些示例输入:

year <- c(2017, 2015, 2014)
month <- c(3, 1, 10)
day <- c(15, 9, 25)

转换为年 - 月 - 日字符串这不是yyyy-mm-dd,因为1位数月份和天数不是零填充为2位数字:

paste(year, month, day, sep = "-")
## [1] "2017-3-15"  "2015-1-9"   "2014-10-25"

转换为Date类它在控制台上打印为yyyy-mm-dd。两种选择:

as.Date(paste(year, month, day, sep = "-"))
## [1] "2017-03-15" "2015-01-09" "2014-10-25"

as.Date(ISOdate(year, month, day))
## [1] "2017-03-15" "2015-01-09" "2014-10-25"

转换为字符串yyyy-mm-dd 在这种情况下,1位数的月份和日期将零填充为2个字符。两种选择:

as.character(as.Date(paste(year, month, day, sep = "-")))
## [1] "2017-03-15" "2015-01-09" "2014-10-25"

sprintf("%d-%02d-%02d", year, month, day)
## [1] "2017-03-15" "2015-01-09" "2014-10-25"

答案 1 :(得分:0)

如何将三个变量合并为一个变量?

考虑两种方法:

  1. 旧学校

  2. 使用dplyrlubridate和数据框

  3. 并考虑数据类型。您可以:

    1. 数字或字符
    2. DatePOSIXct最终类型
    3. 老派方法

      老派的方法很简单。我假设你正在使用向量列表,但还不知道数据帧。让我们获取您的数据,强制它采用标准化,明确的格式,并连接数据。

      > y <- 2012:2015
      > y
      [1] 2012 2013 2014 2015
      > m <- 1:4
      > m
      [1] 1 2 3 4
      > d <- 10:13
      > d
      [1] 10 11 12 13
      

      如果您想要安全并在连接之前将所有内容转换为相同的格式,请使用as.numeric。如果您获得任何NA值,则需要使用is.na函数处理它们并提供默认值。

      使用paste并将sep分隔符值设置为分隔符,在本例中为连字符。

      > paste(y,m,d, sep = '-')
      [1] "2012-1-10" "2013-2-11" "2014-3-12" "2015-4-13"
      

      Dataframe / Dplyr / Lubridate Way

      > df <- data.frame(year = y, mon = m, day = d)
      > df
        year mon day
      1 2012   1  10
      2 2013   2  11
      3 2014   3  12
      4 2015   4  13

      下面我会做以下几点:

      1. 选择df对象
      2. 创建新变量名称Date
      3. 将数字变量ymd-分隔符连接起来
      4. 使用Date
      5. 将字符串文字转换为ymd()格式

        > df %>% 
          mutate(Date = ymd(
                  paste(y,m,d, sep = '-')
                        )
                )
          year mon day       Date
        1 2012   1  10 2012-01-10
        2 2013   2  11 2013-02-11
        3 2014   3  12 2014-03-12
        4 2015   4  13 2015-04-13