根据 R 数据帧中的匹配时间戳转置数据
Transpose data based on matching time stamps in R data frame
Objective:创建一个数据框,其中:
- 每一行都对应一个唯一的 ID (site_no) 和时间戳 (startDateTime)
- 每一列都由参数 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
Objective:创建一个数据框,其中:
- 每一行都对应一个唯一的 ID (site_no) 和时间戳 (startDateTime)
- 每一列都由参数 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