2013-03-18 4 views
0

큰 데이터 세트를 작업 중이며 모든 사이트에 공통된 날짜를 찾고 싶습니다.데이터 프레임의 모든 사이트에 공통된 날짜 찾기

site <- c(1,1,1,2,2,2,2,3,3,4,4,4) 
date <- c("4th Nov","5th Nov","6th Nov","5th Nov","6th Nov","7th Nov","8th Nov","5th Nov","6th Nov","6th Nov","7th Nov","8th Nov") 
temperature <- c(3,5,7,3,6,8,5,3,5,7,8,9) 
data <- data.frame(site,date,temperature) 

common.dates(data) 
[1] "6th Nov" 

어떤 도움을 주시면 감사하겠습니다. 감사!

+1

"모든 사이트에 공통"을 정의하십시오. –

+0

이 데이터의 모든 사이트에 공통된 날짜가 없습니다! –

+0

고맙습니다. – Brian

답변

1

(이 최적화되지 않은 경우에도) 당신이 할 수 있습니다 :

dates <- union(NULL,data$date) 
sites <- union(data$site,NULL) 

w <- array(0,length(dates)) # number sites per date 
for (i in sites) 
    for (j in 1:length(dates)) 
     w[j] <- w[j] + dates[j] %in% data$date[data$site==i] 

dates[w == length(sites)] # returns the dates common to all sites 
+0

이것은 실제로 더 잘 작동합니다! – Brian

+0

더 빠르다는 뜻입니까? – Pop

+0

제 생각에'Reduce (intersect, split (data $ date, data $ site))'는 내 "실제"데이터 프레임에서 작동하지 않고 왜 그런지는 모르겠지만 ... 당신의 방법이 될 것입니다. 이 질문은 업무 관련 질문이므로 당장 문제를 해결할 가치가 있는지 확신 할 수 없습니다. 아마도 나중에이 방법이 다른 것보다 더 유연하다고 말하고 싶었을 것입니다. – Brian

2

plyr 사용 방법 :

with(ddply(data, .(date), function(x) all(1:4 %in% x$site)), date[V1 == TRUE]) 
# [1] 6th Nov 
6

그것은 split, intersect의 조합으로 작동하고, Reduce :

Reduce(intersect, split(data$date, data$site)) 

[1] "6th Nov" 
+0

@Arun 마침내 당신은 당신의'Reduce' 예제를 얻었습니다 ... –

+0

네, 만약 내가이 매끄러운 해결책을 생각한다면 그것은 나를 더 행복하게 만들었 겠지요! :) – Arun

관련 문제