누락 된 관측치와 후속 산술을 가진 데이터에서 pairwise 일치를 수행하는 dplyr 메소드를 아는 사람이 있습니까? 아래의 for-loop 무거운 코드는 기본 MWE이지만 훌륭한 비네팅 및 문서에도 불구하고 dplyr 방식으로 내 팔을 얻을 수는 없습니다.루프를 제거하기 위해 dplyr을 사용하는 방법은 무엇입니까?
간단히 말해 코드는 을 계산합니다. 이는 누락 수량 관측치 q
이 그 주에 인접한 adj
상점에서 판매 된 것의 평균입니다.
편집 : 여러 정책이있는 주에 관심이 있습니다. 아래 세로줄은 주 경계를 나타냅니다. 카운티 1, 2 및 3은 상태 A (정책 A 포함)에 있고 카운티 4, 5 및 6은 상태 B (정책 B 포함)에 있습니다. 카운티에는 여러 매장이있을 수 있습니다.
----|----
1 | 4
|----
----| 5
2 |
----|----
3 | 6
----|----
contig.id
contig.id == 1
)은 1과 2가 동일한 상태이므로 카운티 2의 지리적 인접성을 무시한 반대 상태 (
adj1 == 4
및
adj2 == 5
)의 카운티 4와 5에 인접합니다.
동일한 방법으로 county 4 (contig.id == 4
)는 county 1에만 인접합니다 (adj1 == 1
및 adj2 == NA
). EDIT 종료.
df <- data.frame(store = c(1001,1001,145,331,228,228,500,500,61,1135),
end.week = c(20061125,20061118,20061125,20061125,20061125,
20061118,20061125,20061118,20061118,20061125),
contig.id = c(1,1,2,3,4,4,4,4,5,NA),
adj1 = c(4,4,5,6,1,1,1,1,1,NA),
adj2 = c(5,5,NA,NA,NA,NA,NA,NA,2,NA),
q = c(12.25,14.5,18.75,16,16.5,22,55.25,8.25,24,37.75))
dev <- NULL
dev1 <- NULL
for (i in 1:length(df$contig.id)) {
temp1 <- integer(0)
temp2 <- integer(0)
if (is.na(df$contig.id[i]) == FALSE) {
temp1 <- which((df$contig.id == df$adj1[i]) &
(df$end.week == df$end.week[i]))
if (length(temp1) > 0) {
dev[i] <- sum(df$q[temp1])
}
if (is.na(df$adj2[i]) == FALSE) {
temp2 <- which((df$contig.id == df$adj2[i]) &
(df$end.week == df$end.week[i]))
if (length(temp2) > 0) {
dev[i] <- dev[i] + sum(df$q[temp2])
}
}
} else {
dev[i] <- NA
}
dev[i] <- dev[i]/(length(temp1) + length(temp2))
dev1[i] <- (df$q[i])/dev[i]
}
df <- cbind(df,dev,dev1)
을 계산하는
stores_time
합병 사용할 수 있지만 꽤 관계 주위에 내 머리를 얻을 수 없다 : 우리는 쉽게 그것을 만들기 위해 몇 가지select
마법을 사용할 수 있습니다 adj1, adj2 및 contig.id의 좀 더 자세히 설명해 주시겠습니까? – AndrewMacDonald@AndrewMacDonald, 위의 편집 그림은 내가 그 관계에 대해 어떻게 생각해 왔는지입니다. –