使用dplyr扩散后润滑周期混乱

问题描述 投票:2回答:1

我正在使用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

小时和分钟变得一团糟,但奇怪的是没有几秒钟。那是一个错误还是我做错了?

r dplyr lubridate period spread
1个回答
0
投票

正如爱德华(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
© www.soinside.com 2019 - 2024. All rights reserved.