使用 spread() 将日期时间转换为列名
Using spread() to convert datetime into column name
我有一个包含两列的数据集:第一列名为 'key' 并包含日期时间(尽管当前为字符形式),第二列包含更多日期时间值。我想使用 spread 使键行成为列名。有点复杂,但一旦完成,我会将 tibble 转换为列表,并将其与另一个函数一起使用,以创建由日期时间列标题命名的计划。
现在的数据是这样的:
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() 将日期时间设为列名?
我们需要一个序列列,因为有重复的记录
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
我有一个包含两列的数据集:第一列名为 'key' 并包含日期时间(尽管当前为字符形式),第二列包含更多日期时间值。我想使用 spread 使键行成为列名。有点复杂,但一旦完成,我会将 tibble 转换为列表,并将其与另一个函数一起使用,以创建由日期时间列标题命名的计划。
现在的数据是这样的:
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() 将日期时间设为列名?
我们需要一个序列列,因为有重复的记录
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