2017-01-24 4 views
0

관련된 여러 열의 값을 샘플링하려고했지만 여러 가지 방법이 있습니다. 나는 sample 함수로 시도하고 있지만, 나는 더 이상 어떠한 조건도 선택할 수 없기 때문에 나를 제한한다.두 열의 샘플 변수 R

 H M M.1 M.2 M.3 
1 0.06 0.06 0.06 0.06 0.06 
2 0.08 0.14 0.14 0.14 0.14 
3 0.04 0.05 0.05 0.05 0.05 
4 0.05 0.07 0.07 0.07 0.07 
... 

하지만 각 행 만 샘플 하나 개의 값으로 원하고, 동일한 조건까지 함께 다음 행으로 이동 :이 명령을 사용하면

df<-data.frame("M"=c(0.06,0.14,0.05,0.07), "H"=c(0.06,0.08,0.04,0.05)) 
    df 
#  M H 
# 1 0.06 0.06 
# 2 0.14 0.08 
# 3 0.05 0.04 
# 4 0.07 0.05 

    sample(df,size=1000,replace=TRUE) 

, 그것은 행과 열을 재 샘플링 행의 끝. 마지막으로, 더 이상 행이 없을 때, 그것은 다시 size=1000까지 시작해야하므로 길이가 1000 인 벡터를 가질 수 있습니다.

예 : r = row, c = column) : 0.06 (r1c1) 0.14 (R2C1) 0.05 (r3c1) 0.05 (R4C2) 0.06 (R1C2) 0.14 (R2C1) 0.03 (R3C2) 0.07 (r4c1) 등.

도움을 주셔서 감사합니다.

나는 내가 무엇을 찾고 것은 루프 기능 같은 것을 생각하지만, 나는 아직도 그것을하는 방법을 모른다 :

편집.

답변

3

먼저 두 개의 열 (행 색인 및 열 색인)의 색인 행렬을 작성한 다음 원래 행렬 색인으로 색인을 만들어야합니다.

idx <- matrix(c(rep(1:4,250), sample(1:2, 1000, replace=T)), ncol=2) 
res <- as.matrix(df)[idx] 
0

사용자 지정 기능을 사용해야합니다.

myfunc <- function(dataframe, nsamples = 1000){ 
    rows = ((0:nsamples)%%nrow(df)) + 1 #use the %% to get the row to sample 
    cols = sample(ncol(df), nsamples, replace = TRUE) #and the cols 
    sapply(1:nsamples, function(x){df[rows[x],cols[x]]}) #sapply to get as a vector 
} 
myfunc(df,10) 
[1] 0.08 0.05 0.07 0.06 0.08 0.05 0.05 0.06 0.08 0.05 
:

여기에 그것을 할 수있는 하나의 작은 방법입니다