2017-09-06 5 views
0

가장 가까운 순위의 "기타"지방 당국이 "글래스고"지역에 가장 근접한 새 데이터 세트를 만들고 싶습니다. 보다 낮은. 그것은 같은 관찰이 여러 번 선택 될 수 있도록 대체하는 선택입니다. 그것은 가장 가까운 상위의로 6 회 - 그것은대소 문자 대조 가장 가까운 위/아래 정렬 대체 방법 - 동일한 관찰을 여러 번 선택하는 방법

데이터 영역 1,004,568은 글래스고 사람의 낮은 4 가장 가까운의로 4 회 - 나는 새 데이터 세트에 원하는 것은

DataZone<- c("1005247", "1003253", "1003708", "1003158", "1003428", 
"1004568", "1008765", "1001122", "1005234") 
LocalAuthority<-c("Other", "Glasgow","Glasgow","Glasgow","Glasgow", "Other", 
"Glasgow", "Glasgow", "Other") 
Rank<-c(1,2,3,4,5,6,7,8,9) 
df<-data.frame(DataZone, LocalAuthority, Rank) 

데이터 영역 1,005,247입니다 글래스고 (Glasgow)의 4 개, 글래스고 (Glasgow) DZ의 가장 가까운 2 개. 는 글래스고 사람

내가 가진 코드 나에게 모든 관련 DataZones로 새로운 데이터를 제공합니다 높은 2 가장 가까운하지만 데이터 영역을 허용하지 않기 때문에 2 회 -

데이터 영역 1,005,234 여러 번 포착되고 :

df<-df[order(df$Rank),] 
IncControls = Loop %>% 
mutate(newcol = ifelse(!LocalAuthority=="Glasgow"& 
(lag(LocalAuthority)=="Glasgow"|lead(LocalAuthority)=="Glasgow"),1,0)) %>% 
filter(newcol==1) 

답변

0

당신은 당신의 출력 형식을 지정해야합니다을하지만 당신은이

Lengths <- rle(LocalAuthority)$lengths 
# 1 4 1 2 1 
Positions <- cumsum(rle(LocalAuthority)$lengths) 
# 1 5 6 8 9 
isGlasgow <- rle(LocalAuthority)$values=="Glasgow" 
# FALSE TRUE FALSE TRUE FALSE 

F <- rep(DataZone[head(Positions[lead(isGlasgow)],-1)], Lengths[isGlasgow]) 
# "1005247" "1005247" "1005247" "1005247" "1004568" "1004568" 
R <- rep(DataZone[tail(Positions[lag(isGlasgow)],-1)], Lengths[isGlasgow]) 
# "1004568" "1004568" "1004568" "1004568" "1005234" "1005234" 

ans <- sort(c(F,R)) 
ans 
# "1004568" "1004568" "1004568" "1004568" "1004568" "1004568" "1005234" 
# "1005234" "1005247" "1005247" "1005247" "1005247" 

table(ans) 
# 1004568 1005234 1005247 
#  6  2  4 
+0

가 답장을 보내 주셔서 감사합니다 시도 할 수 있습니다. 출력의 형식이 어떤 의미인지는 아직 확신 할 수 없습니다. 내가 찾고있는 것은 더 많은 변수를 가진 원본 데이터와 병합하여 모든 컨트롤에 대한 모든 변수가 포함 된 데이터 세트를 만들 수 있도록 DataZones 목록입니다. 이 코드를 사용하여 DataZones 목록을 얻습니다. 글래스고가 아닌 여러 개의 글래스 고가있을 때 마지막 글자 만 계산되고 글래스 고에 가장 가까운 위/아래로 동작합니다. 대신 계산해라. – Erika

관련 문제