2014-12-03 4 views
0

나는 내 질문을 바꾸려고한다. 다음 데이터 프레임 bb1이 있으며 dply에서 dcast를 사용하여 디 스테스팅하고 있습니다. 이 예제에서 "조건"(subject ~ condition)에 따라 각 "subject"의 "rt"열에 얼마나 많은 obersvations가 있는지 계산하려고합니다. 그러나 "z.score"가있는 관찰 만 원한다면 크리닝 상태. 벨로우즈 예제에서는 abs (z.score)> 1.5를 사용했지만 때로는 1.5, 가끔은 1, 때로는 2가 될 수도 있습니다. 1.5는 예제 일뿐입니다. 또한 예제에서 나는 길이를 계산하지만 평균값을 계산할 수 있기를 바란다. (예를 들어 "주제"에 대한 "평균"열의 의미는 "z.score" "> 1.5이므로 길이는 여기에 한 예입니다).dcast를 사용할 때 각 ID에 대해 value.var을 ​​얻는 방법은 무엇입니까?

require(reshape2) 
require(dplyr) 
bb1 = data.frame(subject=c(99,99,99,99,99,11,11,11), rt=c(100,150,2,4,10,15,1,2), ac=rep(1,8), 
condition=c(1,1,2,4,3,3,4,4), z.score=c(0.2,0.3,0.2,0.3,0.3,0.2,0.2,0.2)) 

> bb1 
#  subject rt ac condition z.score 
# 1  99 100 1   1  0.2 
# 2  99 150 1   1  0.3 
# 3  99 2 1   2  0.2 
# 4  99 4 1   4  0.3 
# 5  99 10 1   3  0.3 
# 6  11 15 1   3  0.2 
# 7  11 1 1   4  0.2 
# 8  11 2 1   4  0.2 

bb1 %>% 
    group_by(subject, condition) %>% 
    summarise(n = length(rt[abs(z.score) > 1.5])) %>% 
    dcast(subject ~ condition, value.var = "n") 

# subject 1 2 3 4 
# 1  11 NA NA 0 0 
# 2  99 0 0 0 0 

내 주제는 각 주제에 대해 value.var = "n"을 계산하려면 어떻게해야합니까? 조건별로 각 과목마다 다르지 않은가? 조건에 따라 각 주제에 대해 value.var를 얻고 싶습니다. 이것은 각 행의 여백을 계산할 수 있음을 의미합니다. 그러나 subject-condition에 대해 value.var를 얻고 싶지는 않습니다. 여백 만 얻고 싶습니다 (즉, 조건에 따라 각 subject에 대해 value.var를 얻고 싶습니다). 그리고 data.frame으로 저장하십시오. 나는 위의 BB1에서 이

# subject rt 
# 1 11 0 
# 2 99 0 

Becaude 뭔가를 좀하고 싶습니다 두 과목 (즉, 대상 11 주제 99) 나는의 z.score 제한을 충족 조건 중 하나에 관찰이 없습니다 둘 다 0을 얻을 필요가있다.

내 질문이 지금은 더 좋기를 바랍니다.

어떤 도움을 주시면 대단히 감사하겠습니다. 감사합니다, 아얄라

+1

당신의 예제에서 ... z.score는 모두 0.2 또는 0.3이지만, 카운트 될 조건은'> 1.5'입니다. 'n = sum (abs (z.score)> 1.5)'를 사용하여 '요약'을 간소화 할 수 있습니다. 그러나 1.5 임계 값이 주어지면 산출물이 정확합니다. – Gregor

+2

출력을 원하는대로 추가 할 수 있습니까? 아마도 마진을 추가하기를 원할 것입니다. (마진 = "조건"을'dcast'에 추가하십시오) 아니면'dcast (subject ~., value.var = "n")'를 원합니까? – aosmith

+0

@aosmith 질문에 대한 답을 다시 썼습니다. 나는 dcast (subject ~., value.var = "n")를 시도했지만, 2와 4를 얻었고 (각각 대상 11과 99), 관찰 조건이 없기 때문에 두 가지 모두 0을 얻어야한다. 내 z.score 제한을 충족합니다 – ayalaall

답변

1

그것은 같습니다 당신이 어떤 값 위의 z.score과 과목의 수를 계산하려면 여기 하나의 방법입니다, (나는 그래서 예를 들어 0.2을 사용하고 1.5 위가 표시되지 않습니다) 각 주제가 귀하의 z.score 조건을 충족시키는 횟수를 보여주는 각 subject에 대한 요약 데이터 세트를 만들고 싶을뿐입니다. dplyr (그룹 요약을위한 많은 옵션 중 하나를) 사용 : 당신이 정말 sum에 기본 length에서 집계 기능을 변경, 이에 대한 dcast을 사용하려면

bb1 %>% group_by(subject) %>% 
    summarise(rt = sum(abs(z.score) > 1.5)) 

Source: local data frame [2 x 2] 

    subject rt 
1  11 0 
2  99 0 

. 원하는 이름을 틸드 (~)의 오른쪽에 따옴표로 묶어 dcast에 넣어 새 열의 이름을 지정할 수 있습니다.

bb1 %>% group_by(subject, condition) %>% 
    summarise(n = sum(abs(z.score) > 1.5)) %>% 
    dcast(subject ~ "rt", value.var = "n", fun = sum) 

    subject rt 
1  11 0 
2  99 0 
+0

정말 고마워요! 당신의 제안은 정확히 내가 필요로했던 것이었고 나는 또한 많은 것을 배웠습니다. – ayalaall

0

그래서 각 과목에 대해 얼마나 많은 측정을했는지 알고 싶습니까? 난 당신이 찾고있는 것을 이해하고있어 잘 모르겠지만, 내가 가지고 있다면 그것은 바로 당신이 원하는 것을, 나는 그냥이 같은 plyr 사용하십시오 :

library(plyr) 
ddply(bb1, c("subject"), function(x) nrow(x)) 

편집 : 내가 좋아하는 초보자 대답, 약간 수정.

count(bb1[bb1$z.score > 0.2, ], "subject") 
+0

'dplyr :: group_size 함수 '가 있다고 생각합니다. –

+0

@BondedDust, 오른쪽 (먼저'group_by'를 사용해야합니다). 또는'count (bb1, subject)'를 사용할 수 있습니다. –

+0

'summary_' 함수가 행을 무너 뜨릴 때 문제를 일으킬 수 있다고 추측했지만'group_by'는'upstream '에 대한 호출이있었습니다. 내가 요약 된 질문에 답을 얻은 것처럼 대답했다. 당신처럼 나는 목표가 정확히 무엇인지 정확히 모릅니다. 사람들이 바라는 결과에 대한 설명으로 잘못된 코드를 사용하기를 기대하는 것은 불행한 일입니다. –

관련 문제