【问题标题】:Using spread() to convert datetime into column name使用 spread() 将日期时间转换为列名
【发布时间】:2018-04-18 03:45:58
【问题描述】:

我有一个包含两列的数据集:第一列名为“key”并包含日期时间(尽管目前是字符形式),第二列包含更多的日期时间值。我想使用传播使关键行成为列名。有点复杂,但一旦完成,我会将 tibble 转换为列表,并与另一个函数一起使用它来创建由 datetime 列标题命名的计划。

现在的数据是这样的:

new_dat <- structure(list(key = c("2018-01-01 01:00:00", "2018-01-01 01:00:00", 
                       "2018-01-01 01:00:00", "2018-01-01 01:00:00", "2018-01-01 01:00:00", 
                       "2018-01-02 01:00:00", "2018-01-02 01:00:00", "2018-01-02 01:00:00", 
                       "2018-01-02 01:00:00", "2018-01-02 01:00:00", "2018-01-03 01:00:00", 
                       "2018-01-03 01:00:00", "2018-01-03 01:00:00", "2018-01-03 01:00:00", 
                       "2018-01-03 01:00:00"), value = structure(c(1514835600, 1514920800, 
                                                                   1515013380, 1515100860, 1515173100, 1514925060, 1514994060, 1515088920, 
                                                                   1515181020, 1515271740, 1515011880, 1515079200, 1515174240, 1515256980, 
                                                                   1515345600), class = c("POSIXct", "POSIXt"), tzone = "America/Boise")), class = c("tbl_df", 
                                                                                                                                                     "tbl", "data.frame"), row.names = c(NA, -15L), .Names = c("key", 
                                                                                                                                                                                                               "value"))

我希望它看起来像这样:

A tibble: 7,201 x 3
    `2018-01-01 01:00:00` `2018-01-02 01:00:00` `2018-01-03 01:00:00`
    <dttm>                <dttm>                <dttm>               
    2018-01-01 01:00:00   2018-01-02 01:00:00   2018-01-03 01:00:00

我使用了 spread() 并得到以下错误:

Error in eval_tidy(enquo(var), var_env) : object '' not found

是否可以使用 spread() 将日期时间设为列名?

【问题讨论】:

    标签: r dplyr tidyverse lubridate


    【解决方案1】:

    我们需要一个序列列,因为有重复的记录

    library(tidyverse)
    new_dat %>%
      group_by(key) %>% 
      mutate(rn = row_number()) %>% 
      spread(key, value) %>%
      select(-rn)
    # A tibble: 5 x 3
    #  `2018-01-01 01:00:00` `2018-01-02 01:00:00` `2018-01-03 01:00:00`
    #  <dttm>                <dttm>                <dttm>               
    #1 2018-01-01 12:40:00   2018-01-02 13:31:00   2018-01-03 13:38:00  
    #2 2018-01-02 12:20:00   2018-01-03 08:41:00   2018-01-04 08:20:00  
    #3 2018-01-03 14:03:00   2018-01-04 11:02:00   2018-01-05 10:44:00  
    #4 2018-01-04 14:21:00   2018-01-05 12:37:00   2018-01-06 09:43:00  
    #5 2018-01-05 10:25:00   2018-01-06 13:49:00   2018-01-07 10:20:00  
    

    【讨论】:

      猜你喜欢
      • 2017-05-17
      • 1970-01-01
      • 1970-01-01
      • 2017-05-14
      • 2021-04-26
      • 2014-07-01
      • 1970-01-01
      相关资源
      最近更新 更多