2014-01-28 5 views
0

열 df $ Time이있는 시계열이 있습니다. 또한 일출 시간 (df $ Sunrise)을 포함하는 열과 그날의 일몰 시간 (df $ Sunset)을 포함하는 열이 있습니다.시간 x와 시간 y 사이의 시간 만 포함하는 행 선택

주간과 야간 두 부분으로 데이터를 분리하고 싶습니다. 나는. 나는 일출과 일몰 사이의 시간과 일몰과 일출 사이의 밤을 선택하고 싶다.

나는 이것에 대해 가장 좋은 방법이 무엇인지 잘 모르겠습니다. ifelse 문에서 시간을 사용할 수 있습니까? 아니면 내가 모르는 데 도움이되는 기능이 있습니까?

df $ 시간이 현재 요소로 저장됩니다. df $ Sunrise 및 df $ Sunset은 POSIXct로 저장됩니다. 내 데이터의

예 :

Time  Sunrise    Sunset 
00:01:00 2009-09-17 07:41:30 2009-09-17 20:05:30 
00:02:00 2009-09-17 07:41:30 2009-09-17 20:05:30 
00:02:00 2009-09-17 07:41:30 2009-09-17 20:05:30 
00:04:00 2009-09-17 07:41:30 2009-09-17 20:05:30 

이 샘플에서 나는 밤으로 표시하는 것으로 모든 시간을 싶습니다.

+1

몇 가지 샘플 데이터를 표시 할 수 있습니까? df $ Time이 날짜, 숫자 또는 문자 값으로 저장되는지, 값이 어떻게 표시되는지는 중요합니다. –

답변

1
df.day<-df[df$Time>df$Sunrise & df$Time<df$Sunset, ] 
df.night<-df[df$Time<df$Sunrise & df$Time>df$Sunset, ] 

일부 데이터를 보지 않고도 도움이 될 것이라고 생각합니다. 본질적으로 하루 동안 df $ Time 행과 밤 중 하나만있는 행이있는 두 개의 데이터 프레임을 만듭니다.

+0

감사합니다. 하루 데이터 프레임에서는 작동하지만 밤에는 0 회의 관측치를 반환하고 일몰과 일출 사이의 값은 없음을 반환합니다. 나는 혼란 스럽다. – user3021648

0

이렇게하면 작업이 정리 될 것입니다.

# read in (slightly edited) data 
df<-data.frame(Time=c("07:40:00","07:42:00","15:02:00","20:06:00"),Sunrise=c("2009-09-17 07:41:30","2009-09-17 07:41:30","2009-09-17 07:41:30","2009-09-17 07:41:30"),Sunset=c("2009-09-17 20:05:30", "2009-09-17 20:05:30", "2009-09-17 20:05:30", "2009-09-17 20:05:30")) 

# convert character to POSIXct 
df$Sunrise<-as.POSIXct(df$Sunrise,format="%Y-%m-%d %H:%M:%S") 
df$Sunset<-as.POSIXct(df$Sunset,format="%Y-%m-%d %H:%M:%S") 

# add date to Time variable and convert to POSIXct 
df$Time<-as.POSIXct(paste(strptime(df$Sunrise,"%Y-%m-%d"),df$Time),format="%Y-%m-%d %H:%M:%S") 

# identify times during the day 
df.day<-df[df$Time>df$Sunrise & df$Time<df$Sunset, ] 
# identify times NOT during the day 
df.night<-df[!(df$Time>df$Sunrise & df$Time<df$Sunset), ] 

밤 시간을 찾기 위해 이전 응답에서 not (!) 연산자를 사용해야합니다. 나는 당신이 시간에 대한 숫자 변수를 가지고 있다고 생각했고 이전에는 POSIXct 데이터로 작업하지 않았다. 그래도 문제는 해결됩니다.