2017-10-30 6 views
0

패널 데이터 세트에 대해 수동으로 부트 스트랩을 수행하고 싶습니다. 나중의 조작의 일관성을 확인하기 위해 개별 레벨에서 클러스터링해야합니다. 즉, 부트 스트랩 샘플에서 동일한 개인에 대한 모든 관찰을 선택해야한다고합니다. 내가하는 일은 인덱스로 사용되는 고유 한 개별 ID의 벡터에서 대체를 사용하여 리샘플링을 수행하는 것입니다.R : 리샘플링 후 그룹별로 행 선택

df <- data.frame(ID = c("A","A","A","B","B","B","C","C","C"), v1 = c(3,1,2,4,2,2,5,6,9), v2 = c(1,0,0,0,1,1,0,1,0)) 

boot.index <- sample(unique(df$ID), replace = TRUE) 

그때 나는 분명히 df1 <- df[df$ID == testboot.index,] 내가 원하는 것을 제공하지 않습니다이

ID v1 v2 
B 4 0 
B 2 1 
B 2 1 
B 4 0 
B 2 1 
B 2 1 
C 5 0 
C 6 1 
C 9 0 

같은 데이터 프레임을 갖고 싶어, 인덱스에 따라 행을 선택 boot.index = (B, B, C)을 가정합니다. 내가 subsetfilterdplyr에 시도했지만 아무 것도 작동하지 않습니다. 기본적으로 이것은 그룹 인덱스, 제안 사항별로 전체 그룹을 선택하는 문제입니까? 감사!

답변

0
set.seed(42) 
boot.index <- sample(unique(df$ID), replace = TRUE) 
boot.index 
#[1] C C A 
#Levels: A B C 

do.call(rbind, lapply(boot.index, function(x) df[df$ID == x,])) 
# ID v1 v2 
#7 C 5 0 
#8 C 6 1 
#9 C 9 0 
#71 C 5 0 
#81 C 6 1 
#91 C 9 0 
#1 A 3 1 
#2 A 1 0 
#3 A 2 0 
+0

주문은 실제로 중요하지 않습니다. 'C C A'또는 'C A C'는 중요하지 않습니다. – DXC

0

%in% 원하는 행을 선택하면 원하는 결과를 얻을 수 있습니다.

> df 
    ID v1 v2 
1 A 3 1 
2 A 1 0 
3 A 2 0 
4 B 4 0 
5 B 2 1 
6 B 2 1 
7 C 5 0 
8 C 6 1 
9 C 9 0 
> boot.index 
[1] A B A 
Levels: A B C 
> df[df$ID %in% boot.index,] 
    ID v1 v2 
1 A 3 1 
2 A 1 0 
3 A 2 0 
4 B 4 0 
5 B 2 1 
6 B 2 1 

dplyr::filter 기반 솔루션 : 또한이 작업을 수행 할 수 있습니다

> df %>% filter(ID %in% boot.index) 
    ID v1 v2 
1 A 3 1 
2 A 1 0 
3 A 2 0 
4 B 4 0 
5 B 2 1 
6 B 2 1 
+0

@amrrs가 절반 완료,하지만 난 여전히 그룹에 그룹 후에 반복이 필요합니다 B – DXC

+0

@amrrs 예, 그게 부트 스트랩의 요점입니다 - 샘플을 사용하여 재 샘플하기 때문에 어떤 관측은 m 한 번 이상 광석. – DXC

+0

그게 바로 색인에 근거한거야? 그래서 당신은 A를 두 번 받았고 그것을 반복하지 않았습니까? – amrrs

0

조인 :

boot.index = c("B", "B", "C") 
merge(data.frame("ID"=boot.index), df, by="ID", all.x=T, all.y=F) 
+0

@ ags29 감사합니다. 당신의 대답은 똑똑하지만, 나는 똑같은 데이터 프레임을 조작하여 새로운 것을 만들고 병합하는 것을 더 선호하므로 d.b의 대답을 받아들입니다. – DXC