이 질문이 새로운 것이 아니라는 것을 알고 있지만 제 경우에는 이전 답변에서 완전히 해결할 수없는 몇 가지 특성이 포함되어 있습니다.
R에는 다음 형식의 'df'(1400 만 개의 요소 포함)라는 매우 큰 데이터 프레임이 있습니다.
ID datetime measurem
1: 1459 2013-01-08 00:00:00 2.24
2: 1459 2013-01-08 01:00:00 2
3: 1459 2013-01-08 02:00:00 2.54
4: 1459 2013-01-08 03:00:00 3.98
5: 1459 2013-01-08 04:00:00 2
6: 1459 2013-01-08 05:00:00 2
7: 1459 2013-01-08 06:00:00 3
....
1007: 2434 2013-01-08 00:00:00 3.45
1008: 2434 2013-01-08 01:00:00 3
1009: 2434 2013-01-08 02:00:00 4
1010: 2434 2013-01-08 03:00:00 5.01
1011: 2434 2013-01-08 04:00:00 4
....
3245: 4780 2013-01-10 00:00:00 3
3246: 4780 2013-01-10 01:00:00 4.73
3247: 4780 2013-01-10 02:00:00 3
df의 구조는 다음과 같습니다.
클래스 'data.table'및 'data.frame': 14103024 obs. 3 개의 변수 중 :$ ID: chr "1459" "1459" ... $ datetime : POSIXct, format: "2013-01-08 00:00:00" "2013-01-08 01:00:00" ... $ measurem: num 2.24 2 2.54 ...
먼저 에너지 데이터 'measurem'을 매일 합계를 취한 다음 격일로 변환하고 (하나는 오전 12 시까 지, 다른 하나는 오후 12 시까 지) ID 열과 날짜를 유지하고 싶습니다. 전체 데이터 프레임이 너무 크기 때문에 상대적으로 빠르게 작동 할 수있는 제안에 감사드립니다.
미리 감사드립니다!
내가 올바르게 이해했다면 ID, 날짜 및 오전 / 오후를 기준으로 " measurem "열 을 요약하고 싶은 것 같습니다 . 질문에 샘플 데이터가 없기 때문에 솔루션을 만들기 위해 직접 만들었습니다.
데이터 :
set.seed(1234)
df <- data.frame(ID=rep(1:5,4),datetime=c("2013-01-08 00:00:00", "2013-01-09 01:00:00", "2013-01-09 13:00:00", "2013-01-08 02:00:00", "2013-01-08 15:00:00",
"2013-01-08 16:00:00", "2013-01-09 01:00:00", "2013-01-09 02:00:00", "2013-01-08 03:00:00", "2013-01-09 18:00:00",
"2013-01-08 14:00:00", "2013-01-09 19:00:00", "2013-01-08 11:00:00", "2013-01-09 10:00:00", "2013-01-08 18:00:00",
"2013-01-09 19:00:00", "2013-01-09 03:00:00", "2013-01-09 02:00:00", "2013-01-09 21:00:00",
"2013-01-09 11:00:00"),measurement=abs(rnorm(20)))
해결책 :
datetime <- as.POSIXlt(df$datetime)
date <- as.Date(datetime)
ind <- ifelse(datetime$hour >= 12,"PM","AM")
df$ind <- ind
df$date <- date
1) data.table 방법 :
library(data.table)
dt <- setDT(df)
dt[,list(count = .N,sum_measure = sum(measurement)),by=list(ID,date,ind)]
2) 기본 R 방식 :
fin <- aggregate(measurement ~ ID + ind + date,data=df,sum)
fin[order(fin$ID),]
ID ind date measurement
# 1 AM 2013-01-08 1.20706575
# 1 PM 2013-01-08 0.98324859
# 1 PM 2013-01-09 0.11028549
# 2 AM 2013-01-09 1.36317871
# 2 PM 2013-01-09 0.99838644
# 3 AM 2013-01-08 0.77625389
# 3 AM 2013-01-09 1.45782727
# 3 PM 2013-01-09 1.08444118
# 4 AM 2013-01-08 2.91014970
# 4 AM 2013-01-09 0.06445882
# 4 PM 2013-01-09 0.83717168
# 5 PM 2013-01-08 1.38861875
# 5 AM 2013-01-09 2.41583518
# 5 PM 2013-01-09 0.89003783
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다