根据 R 数据帧中的匹配时间戳转置数据

Transpose data based on matching time stamps in R data frame

Objective:创建一个数据框,其中:

  1. 每一行都对应一个唯一的 ID (site_no) 和时间戳 (startDateTime)
  2. 每一列都由参数 id (parm_cd) 标识

这是我的数据目前的样子:

myData <- structure(list(site_no = c(1362370, 1362370, 1362370, 1362370, 1362370, 1362370, 1362370, 1362370, 1362370, 1362370), parm_cd = c(602L, 610L, 613L, 618L, 71845L, 71856L, 602L, 610L, 618L, 71845L), result_va = c(0.601, 0.028, 0.028, 0.728, 0.036, 0.092, 0.68, 0.028, 0.705, 0.036), startDateTime = c("2006-11-01 10:46:00", "2006-11-01 10:46:00", "2006-11-01 10:46:00", "2006-11-01 10:46:00", "2006-11-01 10:46:00", "2006-11-01 10:46:00", "2006-11-01 10:47:00", "2006-11-01 10:47:00", "2006-11-01 10:47:00", "2006-11-01 10:47:00")), row.names = c(NA, 10L), class = "data.frame")

这是我希望数据的样子:

一个选项是在创建 rowid 列后使用 pivot_wider

library(dplyr)
library(tidyr)
library(data.table)
 myData %>% 
    mutate(rid = rowid(site_no, parm_cd)) %>% 
    pivot_wider(names_from = parm_cd, values_from = result_va) %>%
    select(-rid)

-输出

# A tibble: 2 x 8
#  site_no startDateTime       `602` `610`  `613` `618` `71845` `71856`
#    <dbl> <chr>               <dbl> <dbl>  <dbl> <dbl>   <dbl>   <dbl>
#1 1362370 2006-11-01 10:46:00 0.601 0.028  0.028 0.728   0.036   0.092
#2 1362370 2006-11-01 10:47:00 0.68  0.028 NA     0.705   0.036  NA    

基础 R 选项正在使用 reshape,它将数据框从长转换为宽

reshape(
  myData,
  direction = "wide",
  idvar = c("site_no","startDateTime"),
  timevar = "parm_cd"
)

给予

  site_no       startDateTime result_va.602 result_va.610 result_va.613
1 1362370 2006-11-01 10:46:00         0.601         0.028         0.028
7 1362370 2006-11-01 10:47:00         0.680         0.028            NA
  result_va.618 result_va.71845 result_va.71856
1         0.728           0.036           0.092
7         0.705           0.036              NA