gather
函数位于正确的位置,实际上您需要unite
而不是separate
。您可能还需要lubridate
包中的内容来转换日期和时间。 (gather
的语法对于人们来说可能很奇怪,如果发现更简单,新的pivot_longer
函数将执行相同的工作。)
library(tidyverse)
library(lubridate)
df %>%
mutate(Day = mdy(Day)) %>%
gather(key = "time_block",value = "Concentration",-Day) %>%
separate(time_block,into = c("from","to"),sep = "-",remove = FALSE) %>%
# Hopefully times are on a 24-hour clock,else you have more work to do
mutate(timestamp_string = paste0(as.character(Day)," ",from)) %>%
mutate(timestamp_dt = ymd_hm(timestamp_string))
输出最终看起来像这样。
Day time_block from to Concentration timestamp_string timestamp_dt
1 2019-01-20 0:00-1:00 0:00 1:00 0.045 2019-01-20 0:00 2019-01-20 00:00:00
2 2019-01-21 0:00-1:00 0:00 1:00 0.058 2019-01-21 0:00 2019-01-21 00:00:00
3 2019-01-20 1:00-2:00 1:00 2:00 0.258 2019-01-20 1:00 2019-01-20 01:00:00
4 2019-01-21 1:00-2:00 1:00 2:00 0.125 2019-01-21 1:00 2019-01-21 01:00:00
,
您也可以使用pivot_longer
library(tidyverse)
df %>%
pivot_longer(-Day,names_to = "time",values_to = "value") %>%
mutate(day_time = lubridate::mdy_hm(paste(Day,sub("X","",time))))
如果您的数据格式如下:
df <-data.frame(
Day = c("01/20/2019","01/21/2019"),`0:00` = c(0.045,0.058),`1:00` = c(0.258,0.125),`2:00` = c(0.335,0.187),`3:00` = c(0.347,0.177),`4:00` = c(0.255,0.275),`5:00` = c(0.198,0.389))
,
您可以尝试(未运行代码)
library(reshape)
yournewdata<-melt(data=yourdata,id.vars=Day)
时间:在您的示例中,您的时间没有以与R日期格式兼容的格式给出。 (R中没有时间范围)。因此,您的数据应转换为小时。我可以通过在执行融化操作之前重命名列来实现。
colnames(mydata)
在将它们转换为时间值之前,应将它们从因子更改为数值。
本文链接:https://www.f2er.com/3097810.html