我正在使用R-3.6.3,lubridate_1.7.4,dbplyr_1.4.2。
提醒:
df_0 <- tibble(period_type = c("a", "b", "c"),
period_value = c("1:1:1", "2:2:2", "4:4:4")) %>%
mutate(period_value = hms(period_value))
df_0
## A tibble: 3 x 2
# period_type period_value
# <chr> <Period>
#1 a 1H 1M 1S
#2 b 2H 2M 2S
#3 c 4H 4M 4S
到目前为止,一切都很好。现在使用dplyr传播:
df_0 %>% spread(period_type, period_value)
## A tibble: 1 x 3
# a b c
# <Period> <Period> <Period>
#1 1H 1M 1S 1H 1M 2S 1H 1M 4S
但是结果应该是
## A tibble: 1 x 3
# a b c
# <Period> <Period> <Period>
#1 1H 1M 1S 2H 2M 2S 4H 4M 4S
小时和分钟变得一团糟,但奇怪的是没有几秒钟。那是一个错误还是我做错了?
正如爱德华(Edward)所说,pivot_wider()
取代了spread()
。但是,它似乎不处理期间类的变量。因此,您需要转换周期值,旋转,然后转换回去。
library(dplyr)
library(lubridate)
df_0 %>%
mutate(period_value = period_to_seconds(period_value)) %>%
pivot_wider(names_from = period_type, values_from = period_value) %>%
mutate_all(seconds_to_period)
# A tibble: 1 x 3
a b c
<Period> <Period> <Period>
1 1H 1M 1S 2H 2M 2S 4H 4M 4S