2014-10-20 3 views
1

기술 품질 점수를 1-5 사이로 지정하여 시각 장애가있는 다른 참가자가 생성 한 데이터 세트가 있습니다.기준을 사용하여 부분 표준을 계산하고 새 날짜 프레임에 저장

아래의 데이터 샘플은 Column Participant가 텍스트 (서로 다른 ID)이고 Column Impairment가 텍스트 (9 개의 고유 유형), Column TechnicalQuality가 숫자 (1-5) 인 경우입니다.

Participant <- c("A001", "A001", "A001", "A002", "A002", "A003", "B001", "B002") 
impairment <- c ("H0", "H1", "H3", "H2", "H4", "H2", "H3", "H0") 
TechnicalQuality <- c(1, 2, 4, 3, 5, 4, 3, 1) 
Exp_1<- data.frame(Participant = Participant, impairment = impairment, 
       TechnicalQuality = TechnicalQuality 

나는 참가자 당 손상의 종류마다 평균 TechnicalQuality을 포함하는 새로운 데이터 프레임 P_TQ_Mean를 만드는 희망, 그리고 난 다음 코드를 사용 : 생성 된 P_TQ_Mean은

P_TQ_Mean<-c() 
for (i in unique(Exp_1$Participant)){ 
d<-subset(Exp_1, Exp_1$Participant ==i) 
c <- aggregate(d$TechnicalQuality, list(d$impairment), mean) 
P_TQ_Mean = rbind(P_TQ_Mean,c) 
} 

을 :

Group.1 x 
1  H0 1 
2  H1 2 
3  H3 4 
4  H2 3 
5  H4 5 
6  H2 4 
7  H3 3 
8  H0 1 

이것은 "A001"이 H0, H1 및 H3에 대해 각각 세 가지 의미를 갖는 것을 보여 주며, 다른 참가자의 경우에도 마찬가지입니다.

손상 당 각 평균에 대한 참가자 ID를 나타 내기 위해 한 열을 추가하는 방법과 처음 두 열에 올바르게 레이블을 지정하는 방법이 있습니까? 예를 들어, 레이블 Group.1은 "손상"으로, x는 "참가자"로 추가 프로세스를 위해 필요합니다.

미리 감사드립니다.

+0

는 R 질문 같은데 좀 더 효율적인 옵션을 시도 할 수 있습니다. 이 이름을 사용중인 소프트웨어의 이름으로 표시하십시오. 그렇지 않으면 그것은 심연으로 사라질 것입니다. –

+1

'합계 (TechnicalQuality ~ 장애 + 참가자, Exp_1, 평균) '시도하십시오 –

답변

3

루프가 필요하지 않습니다. 루프는 for입니다. aggregate는 여러 수집기를 처리

aggregate(TechnicalQuality ~ impairment + Participant, Exp_1, mean) 
# impairment Participant TechnicalQuality 
# 1   H0  A001    1 
# 2   H1  A001    2 
# 3   H3  A001    4 
# 4   H2  A002    3 
# 5   H4  A002    5 
# 6   H2  A003    4 
# 7   H3  B001    3 
# 8   H0  B002    1 

또는

# install.packages("data.table") 
library(data.table) 
setDT(Exp_1)[, list(TechnicalQuality = sum(TechnicalQuality)), by = list(Participant, impairment)] 
# Participant impairment TechnicalQuality 
# 1:  A001   H0    1 
# 2:  A001   H1    2 
# 3:  A001   H3    4 
# 4:  A002   H2    3 
# 5:  A002   H4    5 
# 6:  A003   H2    4 
# 7:  B001   H3    3 
# 8:  B002   H0    1 

또는

# install.packages("dplyr") 
library(dplyr) 
Exp_1 %>% 
    group_by(Participant, impairment) %>% 
    summarise(mean(TechnicalQuality)) 
# Source: local data table [8 x 3] 
# Groups: Participant 
# 
# Participant impairment mean(TechnicalQuality) 
# 1  A001   H0      1 
# 2  A001   H1      2 
# 3  A001   H3      4 
# 4  A002   H2      3 
# 5  A002   H4      5 
# 6  A003   H2      4 
# 7  B001   H3      3 
# 8  B002   H0      1 
+0

절대적으로 멋진 솔루션은 너무 우아 할 수 있다고 생각하지 않았습니다! 고마워요! 나는 아직 투표권이 충분치 못하지만, 일단 내가 가질 것이다! –

+0

NP, 기꺼이 도와 드리겠습니다. –