2012-06-11 1 views
0

에서 그들을 평균 둘 다 프로그래밍과 통계에 관한 것이다. 나는 둘 다에 아주 새다.무작위 값을 선택하고이 질문은 내가 여기에서 이전의 것과 유사 R

하나의 열에 219 개의 피실험자가있는 data.frame이 있습니다. 나머지 열은 7이고, 각 행에는 실험의 두 조건에 노출되었을 때 특정 주제에 대한 응답 시간의 차이를 나타내는 숫자가 있습니다.

> head(RTsdiff) 
     subject block3diff block4diff block5diff block6diff block7diff 
    1 40002 0.076961798 0.046067460 -0.027012048 0.017920261 0.002660317 
    2 40004 0.037558511 -0.016535211 -0.044306743 -0.011541667 0.044422892 
    3 40006 -0.017063123 -0.031156150 -0.084003876 -0.070227149 -0.113382784 
    4 40008 -0.015204017 -0.009954545 -0.004082353 0.006327839 0.022335271 
    5 40009 0.006055829 -0.045376437 -0.002725572 0.016443182 0.032848128 
    6 40010 -0.003017857 -0.034398268 -0.034476491 0.014158824 -0.036592982 
     block8diff block9dif 
    1 0.03652273 0.037306173 
    2 -0.08032784 -0.150682051 
    3 -0.09724864 -0.060338684 
    4 -0.04783333 0.006539326 
    5 -0.01459465 -0.067916667 
    6 -0.01868126 -0.034409584 

는 내가 필요로하는 것입니다 코드는 (모든 주제에 대해, 즉 모든 행입니다 :

이 데이터 외모 (내가 그렇지 않으면 너무 긴 것, 헤드 기능을 사용하고) 어떻게)는 3 또는 4 값을 샘플링하고 평균하여 새 벡터 (half1이라고 함)에 추가합니다. half2 벡터는 첫 번째 시도에서 샘플링되지 않은 값의 평균을 가져야합니다.

그래서, "RTshalves"라고 불리는 data.frame을 만들고 싶다면 RTsdiff에서 첫 번째 열이 동일한 열이되어야합니다. 두 번째 열은 첫 번째 행에 첫 번째 주체에 해당하는 무작위로 선택된 값이고 두 번째 열은 첫 번째 샘플링에서 선택되지 않은 첫 번째 주체 값의 평균을 가져야합니다. 열 2와 열 3의 두 번째 행은 동일한 정보를 가져야하지만 이번에는 대상 2 (즉, 내 data.frame의 40004 대상) 등 219 개 대상에 도달 할 때까지

첫 번째 샘플에서 주제 1 (block3diff, block5diff 및 block9diff)의 3 가지 값을 임의로 선택하여 block4diff, block6diff, block7diff 및 block8diff의 값이 자동으로 나머지 절반에 해당한다고 가정 해 보겠습니다. 그럼, (219 행의 첫 번째 고려) 볼 것으로 예상 할 것입니다 :

Subject  Half1  Half2 
    40002 0.02908531 0.02579269 

사람이 뒤에 통계에 관심이 있다면

, 나는에 분할 반 신뢰성 테스트를 할 노력하고있어 검사의 일관성을 검사하십시오. 이론적 근거는 RT 평균의 차이가 효과의 신뢰할 수있는 평가자라면 한 참가자의 블록 절반의 차이를 나머지 절반의 차이와 상관시켜야한다는 것입니다.

도움을 많이 받으실 수 있습니다. 미리 감사드립니다.

답변

1

half1은 간단합니다 : 행에 apply에게 다음 (벡터로 촬영) 각 행에 당신이 원하는 일을하는 데 자신의 함수를 작성 :

eachrow <- function(x) { 
    mean(sample(x,2)) 
} 
RTsdiff$half1 <- apply(eachrow,1,RTsdiff) 

이 half2를 얻으려면, 당신은 아마거야 동시에 그것을하고 싶다. ddply이 가장 쉽습니다 (by 인수를 각 행을 가져 오는 대상 변수로 사용하십시오). 이와 같이 :

RTsdiff <- data.frame(subject=seq(6)) 
RTsdiff <- cbind(RTsdiff, matrix(runif(6*8),ncol=8)) 

library(plyr) 
eachrow <- function(x,n=3) { 
    x <- as.numeric(x[,2:ncol(x)]) # eliminate the ID column to make things easier, make a vector 
    s <- seq(length(x)) 
    ones <- sample(s,n) # get ids for half1 
    twos <- !(s %in% ones) # get ids for half2 
    data.frame(half1=mean(x[ones]), half2=mean(x[twos])) 
} 
ddply(RTsdiff, .(subject), eachrow) 

    subject  half1  half2 
1  1 0.4700982 0.5350610 
2  2 0.6173469 0.5351995 
3  3 0.2245246 0.6807482 
4  4 0.6330649 0.6316353 
5  5 0.6388060 0.6629077 
6  6 0.4652086 0.5073034 

이렇게하는 방법은 다양합니다. 특히, 나는 half1half2을 함수에서 쉽게 출력 할 수 있도록 data.frames를 쉽게 출력 할 수있는 능력을 위해 ddply을 사용했지만, 결국에는 멋지게 합쳐졌지만, ddply은 data.frames를 입력으로 사용하므로 약간의 처음으로 그것을 벡터로 끌어내는 일. transpose 된 data.frame을 sapply으로 보내면 더 간단해질 수 있습니다.

+0

OP의 욕구를 충족 시키려면 'eachrow' 함수가 첫 번째 열을 제외해야한다고 생각합니다. 아마'mean (sample (x [-1], 2))'이 맞으면 충분할 것입니다. –

+0

'block3diff'를 제외 시키시겠습니까? 그게 내 독서가 아니었지만 만약 당신이 지적한대로 그것을 성취하는 것은 매우 쉽습니다. –

+0

답변을 주셔서 감사합니다 gsk3,하지만 난 그것에 대해 조금 혼란스러워. 먼저, eachrow() 함수를 두 번 정의하는 이유는 무엇입니까? (답안의 첫 번째 청크와 두 번째 청크에서). 둘째, RTsdiff를 두 번 다시 정의하고 내가 가지고있는 데이터를 재정의하는 이유는 무엇입니까? 예제 data.frame을 사용하고 계십니까? 세 번째로 인수 n = 3 인 경우 "ones"에서 샘플링되는 숫자는 항상 3이고 "twos"로 샘플링 된 개체는 항상 4입니다. 샘플링을 무작위로 수행해야합니다 (때로는 3에서 "1", 때로는 4에서 "1"). 많은 도움에 감사드립니다. – HernanLG

관련 문제