【问题标题】:How can I merge three variables into one variable that represents the merged variables separated by a comma? [duplicate]如何将三个变量合并为一个变量,以逗号分隔表示合并后的变量? [复制]
【发布时间】:2018-05-04 01:45:18
【问题描述】:

我有三个变量:年、月和日。如何将它们合并为一个变量(“日期”),以便将变量表示为: yyyy-mm-dd

提前致谢并致以最诚挚的问候!

【问题讨论】:

  • 你试过paste吗?
  • 请在您的问题中添加示例数据,其中包含一个最小的可重现示例,例如。 G。 data <- data.frame(Y = "2010", M = "12", D = "31") 以及您的预期结果应该如何相似。否则很难找到确切的答案。
  • tidyr::unite(df, "Date", Y:D, sep = "-") 如果您不想保留原始列

标签: r variables merge


【解决方案1】:

下面我们创建年-月-日字符串、yyyy-mm-dd 字符串(类似,除了一位数字的月份和日期被零填充为2 位数字)和日期类。最后一个打印为 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"

转换为日期类 它在控制台上打印为 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"

【讨论】:

    【解决方案2】:

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

    考虑两种方法:

    1. 老派

    2. 使用dplyrlubridate 和数据帧

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

    1. 数字或字符
    2. DatePOSIXct 最终类型

    老派方法

    老派的方法很简单。我假设您正在使用 vectorslists 并且还不知道数据帧。让我们获取您的数据,将其强制为标准化、明确的格式,然后连接数据。

    > 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. 使用ymd() 将字符串文字转换为Date 格式

    > 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

    【讨论】:

      猜你喜欢
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多