Объединение столбцов даты и времени в дд / мм / гггг чч: мм
Новое в R и R студии. Я импортировал набор данных с датой и временем в пяти отдельных столбцах с заголовком: ГГГГ ММ ДД чч мм Как объединить их в один столбец даты в формате дд / мм / гггг чч: мм?
Dataset:
3 ответа
На основании новой информации и вопросов, заданных @LauraKate в комментарии.
Ответы ниже сделаны с пакетами dplyr
а также ggplot2
:
df <- read.table("http://www.ndbc.noaa.gov/data/realtime2/51206.txt")
names(df) <- c("YYYY", "MM", "DD", "hh", "mm", "WD", "WSPD", "V1", "GST", "WVHT", "DPD", "APD", "MWD", "BARO", "ATMP", "V2", "V3", "V4", "V5")
df2 <- df %>%
unite(date, YYYY, MM, DD, sep="-") %>%
unite(time, hh, mm, sep=":") %>%
mutate(timestamp=paste(date, time) %>%
as.POSIXct(., format="%Y-%m-%d %H:%M")) %>%
select(timestamp, ATMP)
ggplot(df2, aes(timestamp, ATMP)) + geom_line()
Чтобы получить точки предупреждения, когда дневная максимальная температура превышает 26 градусов (C)?
df3 <- df2 %>%
mutate(date=as.Date(timestamp) %>% as.POSIXct) %>%
group_by(date) %>% summarise(temp=max(ATMP)) %>%
mutate(warnings = ifelse(temp > 26, "red", "black"))
ggplot(df2, aes(timestamp, ATMP)) +
geom_line() +
geom_point(data=df3 %>% filter(warnings=="red"), aes(date, y=27.5), color="red")
Вот ответ, который использует пакет lubridate (отличный пакет для работы с датами). Вам нужно вставить или объединить различные столбцы в один, стереть пробел, а затем использовать lubridate для преобразования его из формата строки в дату. Обратите внимание, что я использовал функцию dmy_hms (вы можете использовать другие функции по мере необходимости с https://cran.r-project.org/web/packages/lubridate/vignettes/lubridate.html
> df=NULL
> df$H=10
> df$M=54
> df$S=27
> df$DD=12
> df$MM=06
> df$YYYY=2007
> df=as.data.frame(df)
> df
H M S DD MM YYYY
1 10 54 27 12 6 2007
> attach(df)
> df$dat1=gsub(" ","",(paste(DD,"/",MM,"/",YYYY)))
> df
H M S DD MM YYYY dat1
1 10 54 27 12 6 2007 12/6/2007
> df$tim1=gsub(" ","",(paste(H,":",M,":",S)))
> df
H M S DD MM YYYY dat1 tim1
1 10 54 27 12 6 2007 12/6/2007 10:54:27
> df$dat2=paste(df$dat1,df$tim1)
> df
H M S DD MM YYYY dat1 tim1 dat2
1 10 54 27 12 6 2007 12/6/2007 10:54:27 12/6/2007 10:54:27
> str(df)
'data.frame': 1 obs. of 9 variables:
$ H : num 10
$ M : num 54
$ S : num 27
$ DD : num 12
$ MM : num 6
$ YYYY: num 2007
$ dat1: chr "12/6/2007"
$ tim1: chr "10:54:27"
$ dat2: chr "12/6/2007 10:54:27"
> library(lubridate)
Attaching package: ‘lubridate’
The following object is masked from ‘package:base’:
date
> df$dat3=dmy_hms(df$dat2)
> str(df)
'data.frame': 1 obs. of 10 variables:
$ H : num 10
$ M : num 54
$ S : num 27
$ DD : num 12
$ MM : num 6
$ YYYY: num 2007
$ dat1: chr "12/6/2007"
$ tim1: chr "10:54:27"
$ dat2: chr "12/6/2007 10:54:27"
$ dat3: POSIXct, format: "2007-06-12 10:54:27"
> df
H M S DD MM YYYY dat1 tim1 dat2 dat3
1 10 54 27 12 6 2007 12/6/2007 10:54:27 12/6/2007 10:54:27 2007-06-12 10:54:27
Ты можешь использовать lubridate::make_datetime
за это.
library(dplyr)
library(lubridate)
df <- data_frame(
YYYY = sample(2000:2017, 10),
MM = sample(1:12, 10),
DD = sample(1:28, 10),
hh = sample(1:23, 10),
mm = sample(1:59, 10)
)
mutate(df,
date_time = make_datetime(
year = YYYY, month = MM, day = DD, hour = hh, min = mm
)
)
#> # A tibble: 10 x 6
#> YYYY MM DD hh mm date_time
#> <int> <int> <int> <int> <int> <dttm>
#> 1 2007 8 11 4 27 2007-08-11 04:27:00
#> 2 2002 7 5 23 51 2002-07-05 23:51:00
#> 3 2006 2 25 12 45 2006-02-25 12:45:00
#> 4 2008 10 1 1 1 2008-10-01 01:01:00
#> 5 2000 1 28 10 42 2000-01-28 10:42:00
#> 6 2010 4 12 21 37 2010-04-12 21:37:00
#> 7 2013 12 8 16 58 2013-12-08 16:58:00
#> 8 2014 5 17 18 56 2014-05-17 18:56:00
#> 9 2009 9 27 20 36 2009-09-27 20:36:00
#> 10 2001 3 14 14 14 2001-03-14 14:14:00