2017-09-23 8 views
0

몇 년 동안 여러 변수가있는 큰 데이터 세트가 있지만 관심있는 것은 풍속 및 날짜 시간입니다. 데이터 세트에서 매일 최대 풍속 시간을 찾고 싶습니다. Posixct 형식의 시간별 데이터를 가지고 있으며 WS는 때때로 NAs와 함께 숫자로 표시됩니다. 아래는 짧은 데이터 세트입니다. 필자의 dateTime은 시간별 데이터가 될 수는 없지만 샘플은 충분합니다.기후 데이터에서 일일 최대 변수의 각 시간 찾기

dateTime <- seq(as.POSIXct("2011-01-01 00:00:00", tz = "GMT"), 
      as.POSIXct("2011-01-29 23:00:00", tz = "GMT"), 
      by = 60*24) 
WS <- sample(0:20,1798,rep=TRUE) 
WD <- sample(0:390,1798,rep=TRUE) 
Temp <- sample(0:40,1798,rep=TRUE) 
df <- data.frame(dateTime,WS,WD,Temp) 
df$WS[WS>15] <- NA 

나는 이전에, 하루에 분리 가능하도록 단지 POSIX 날짜 (마이너스 시간)에 새 열을 만들 때만 날짜와 WS (골재로 단축 데이터 프레임을 반환 한 내가 시도하지만 모든 것을 시도 , 분열, xts). 집계는이 일을하지 않은 유일한 사람 이었지만 정오로 23:00시를 맞았습니다.

나는 How to calculate daily means, medians, from weather variables data collected hourly in R?, https://stats.stackexchange.com/questions/7268/how-to-aggregate-by-minute-data-for-a-week-into-hourly-means 및 기타를 보았지만 아무도이 질문에 답하지 않았거나 해결책이 이상적인 결과를 반환하지 않았습니다.

이 분석 결과를 다른 데이터 프레임과 비교해야하므로 데이터 세트에서 매일 최대 풍속이 발생하는 실제 시간이 필요한 이유가 있습니다. 그러나 간단한 해결책이 있다는 느낌이 들지만, 이것이 나에게 좌절감을 안겨줍니다.

답변

1

디 질문 : "전자의 최대 풍속 시간을 찾고 싶습니다. 며칠 전 데이터 세트에서. " 다른 답변은 매일 최대 (WS)를 계산했지만 발생 시간은 계산하지 않았습니다.

library(dplyr) 
set.seed(12345) 
dateTime <- seq(as.POSIXct("2011-01-01 00:00:00", tz = "GMT"), 
       as.POSIXct("2011-01-29 23:00:00", tz = "GMT"), 
       by = 60*24) 
WS <- sample(0:20,1738,rep=TRUE) 
WD <- sample(0:390,1738,rep=TRUE) 
Temp <- sample(0:40,1738,rep=TRUE) 
df <- data.frame(dateTime,WS,WD,Temp) 
df$WS[WS>15] <- NA 

df %>% 
    group_by(Date = as.Date(dateTime)) %>% 
    mutate(Hour = hour(dateTime), 
     Hour_with_max_ws = Hour[which.max(WS)]) 

enter image description here

내가 밖으로 강조하려는 여러 시간 (아래의 예 : 15)와 동일한 최대 풍속에있을 경우 :

그래서 나는 dyplr 다음과 같은 솔루션을 제안 최대 속도 (WS)가있는 첫 번째 시간 만 결과로 표시되지만 풍속 15는 해당 날짜의 0, 3, 4, 21 및 22 시간에 도달했습니다! 따라서 좀 더 구체적인 논리가 필요할 수도 있습니다.

enter image description here

+0

감사합니다. @ 사무엘. 나의 관측 자료가 km h-1에서 m s-1로 변환 되었기 때문에 나는 희망한다. 그것은이 운동을 위해 충분히 독특 할 것이다. – Dee

2

dplyr 용액 일 수있다 : 완전성을 위해서

library(dplyr) 

df %>% 
    mutate(date = as.Date(dateTime)) %>% 
    left_join(
    df %>% 
     mutate(date = as.Date(dateTime)) %>% 
     group_by(date) %>% 
     summarise(max_ws = max(WS, na.rm = TRUE)) %>% 
     ungroup(), 
    by = "date" 
) %>% 
    select(-date) 

#     dateTime WS WD Temp max_ws 
# 1 2011-01-01 00:00:00 NA 313 2  15 
# 2 2011-01-01 00:24:00 7 376 1  15 
# 3 2011-01-01 00:48:00 3 28 28  15 
# 4 2011-01-01 01:12:00 15 262 24  15 
# 5 2011-01-01 01:36:00 1 149 34  15 
# 6 2011-01-01 02:00:00 4 319 33  15 
# 7 2011-01-01 02:24:00 15 280 22  15 
# 8 2011-01-01 02:48:00 NA 110 23  15 
# 9 2011-01-01 03:12:00 12 93 15  15 
# 10 2011-01-01 03:36:00 3 5 0  15 
+0

안녕 @Kevin Arseneau 나는 샘플 데이터를 시도하고 열을 가입 포함 할 수 없습니다 by' 오류가''date' 우에서 누락되는 입수했습니다. 이 문제가 수정 되었습니까? – Dee

+0

@Dee, 실행중인 코드를 확인하십시오. 질문에 대한 코드를 즉시 실행 한 후에 오류가 없습니다. 난 당신이 뭔가를 놓친 것 같아요,'mut_' 내부의'mutate' 문은 오른쪽에 날짜 열 (RHS)을 만듭니다. –

+0

안녕하세요 @ 케빈 아르 세 노입니다. 나는 R을 닫고 다시 시작했다. 그것은 작동합니다. 다른 모든 것들이 재시작에 실패하면 ... 도와 줘서 고마워! 짧은 코드 덕분에 – Dee

0

(및 I는 간결한 코드 좋아서) 여기서 data.table를 사용하여 "원 라이너"이다

library(data.table) 
setDT(df)[, max.ws := max(WS, na.rm = TRUE), by = as.IDate(dateTime)][] 
    dateTime WS WD Temp max.ws 
    1: 2011-01-01 00:00:00 NA 293 22  15 
    2: 2011-01-01 00:24:00 15 55 14  15 
    3: 2011-01-01 00:48:00 NA 186 24  15 
    4: 2011-01-01 01:12:00 4 300 22  15 
    5: 2011-01-01 01:36:00 0 120 36  15 
    ---          
1734: 2011-01-29 21:12:00 12 249 5  15 
1735: 2011-01-29 21:36:00 9 282 21  15 
1736: 2011-01-29 22:00:00 12 238 6  15 
1737: 2011-01-29 22:24:00 10 127 21  15 
1738: 2011-01-29 22:48:00 13 297 0  15 
+0

에게 감사드립니다. 매우 우아 해 보입니다. 내 데이터로 시도하고 그 결과가 무엇인지 확인합니다. – Dee