如何在 R 中转置或旋转日期框架的列

How to transpose or pivot columns of a date frame in R

我正在尝试转置 R 中的数据。 检索到的数据是一个 JSON 文件,这是我正在使用的数据框的示例:

date                    parameter   value
2020-07-01T23:50:00Z    wind_dir    236.0
2020-07-01T23:40:00Z    wind_dir    236.0
2020-07-01T23:40:00Z    wind_speed  1.9
2020-07-01T23:30:00Z    wind_dir    239.0
2020-07-01T23:10:00Z    wind_dir    184.0
2020-07-01T23:00:00Z    wind_dir    178.0
2020-07-01T22:50:00Z    wind_speed  1.1
2020-07-01T22:50:00Z    wind_dir    197.0
2020-07-01T22:40:00Z    wind_speed  1.8
2020-07-01T22:30:00Z    wind_speed  1.4
2020-07-01T22:20:00Z    wind_dir    172.0
2020-07-01T22:20:00Z    wind_speed  1.4
2020-07-01T22:00:00Z    wind_dir    170.0 
  1. 我需要更改日期,所以它不包括 TZ.
  2. 我想转置行并将参数分成两列:wind_speedwind_dir

最终数据集应如下所示:

date                 wind_dir wind_speed         
2020-07-01 23:50:00  236.0     NA
2020-07-01 23:40:00  236.0     1.9          
2020-07-01 23:30:00  239.0     NA
2020-07-01 23:10:00  184.0     NA
2020-07-01 23:00:00  178.0     NA
2020-07-01 22:50:00  197.0     1.1      
2020-07-01 22:40:00  NA        1.8
2020-07-01 22:30:00  NA        1.4
2020-07-01 22:20:00  172.0     1.4
2020-07-01 22:00:00  170.0     NA 

感谢您的帮助!

你可以试试

library(dplyr)

df %>%
      mutate(date  =gsub("T|Z", " ", date)) %>%
      pivot_wider(names_from = parameter, values_from = value)

   date                   wind_dir wind_speed
   <chr>                     <dbl>      <dbl>
 1 "2020-07-01 23:50:00 "      236       NA  
 2 "2020-07-01 23:40:00 "      236        1.9
 3 "2020-07-01 23:30:00 "      239       NA  
 4 "2020-07-01 23:10:00 "      184       NA  
 5 "2020-07-01 23:00:00 "      178       NA  
 6 "2020-07-01 22:50:00 "      197        1.1
 7 "2020-07-01 22:40:00 "       NA        1.8
 8 "2020-07-01 22:30:00 "       NA        1.4
 9 "2020-07-01 22:20:00 "      172        1.4
10 "2020-07-01 22:00:00 "      170       NA 

您可以使用 tidyr 包中的 pivot_widerpivot_longer 函数。 TZ 是 ISO 8601 的一部分,因此您可以轻松地将它们转换为 class 日期时间的对象:

library(tidyverse)

data <- tribble(
  ~date, ~parameter, ~value,
  
  "2020-07-01T23:50:00Z ", "wind_dir",    236.0,
  "2020-07-01T23:40:00Z "  , "wind_dir",    236.0,
  "2020-07-01T23:40:00Z"  ,  "wind_speed",  1.9
)
data
#> # A tibble: 3 x 3
#>   date                    parameter  value
#>   <chr>                   <chr>      <dbl>
#> 1 "2020-07-01T23:50:00Z " wind_dir   236  
#> 2 "2020-07-01T23:40:00Z " wind_dir   236  
#> 3 "2020-07-01T23:40:00Z"  wind_speed   1.9

data %>%
  mutate(date = date %>% parse_datetime()) %>%
  pivot_wider(names_from = parameter, values_from = value)
#> # A tibble: 2 x 3
#>   date                wind_dir wind_speed
#>   <dttm>                 <dbl>      <dbl>
#> 1 2020-07-01 23:50:00      236       NA  
#> 2 2020-07-01 23:40:00      236        1.9

reprex package (v2.0.1)

于 2021-10-18 创建

TZ 删除可以使用基 R gsub() 完成。其余的可以使用 tidyr 包中的 pivot_wider() 来完成:

raw <- read.table(text = "date                    parameter   value
2020-07-01T23:50:00Z    wind_dir    236.0
2020-07-01T23:40:00Z    wind_dir    236.0
2020-07-01T23:40:00Z    wind_speed  1.9
2020-07-01T23:30:00Z    wind_dir    239.0
2020-07-01T23:10:00Z    wind_dir    184.0
2020-07-01T23:00:00Z    wind_dir    178.0
2020-07-01T22:50:00Z    wind_speed  1.1
2020-07-01T22:50:00Z    wind_dir    197.0
2020-07-01T22:40:00Z    wind_speed  1.8
2020-07-01T22:30:00Z    wind_speed  1.4
2020-07-01T22:20:00Z    wind_dir    172.0
2020-07-01T22:20:00Z    wind_speed  1.4
2020-07-01T22:00:00Z    wind_dir    170.0", header = TRUE)

raw$date <- trimws(gsub("[TZ]", " ", raw$date))


library(tidyr)
packageVersion("tidyr")
#> [1] '1.1.2'

raw <- pivot_wider(raw, 
                   names_from = "parameter", 
                   values_from = "value")

raw
#> # A tibble: 10 x 3
#>    date                wind_dir wind_speed
#>    <chr>                  <dbl>      <dbl>
#>  1 2020-07-01 23:50:00      236       NA  
#>  2 2020-07-01 23:40:00      236        1.9
#>  3 2020-07-01 23:30:00      239       NA  
#>  4 2020-07-01 23:10:00      184       NA  
#>  5 2020-07-01 23:00:00      178       NA  
#>  6 2020-07-01 22:50:00      197        1.1
#>  7 2020-07-01 22:40:00       NA        1.8
#>  8 2020-07-01 22:30:00       NA        1.4
#>  9 2020-07-01 22:20:00      172        1.4
#> 10 2020-07-01 22:00:00      170       NA

reprex package (v2.0.0)

于 2021-10-18 创建