2015-01-16 2 views
1

저는 R이 처음인데 시뮬레이트 된 네트워크에서 채취 한 데이터를 비교 및 ​​변환하여 사용자 패턴을 분석하는 기능을 만드는 임무를 부여 받았습니다.R은 평균의 3 표준 편차 이내의 값을 변환합니다.

R 앱은 사용 된 각 프로토콜의 합계, 합계의 평균 및 합계의 표준 편차를 계산한다고 가정합니다. 이 기능은 현재 :

> total[total == 0] <- NA 
res2 <- do.call(`data.frame`, 
       aggregate(values~ind, stack(total), 
          FUN=function(x) c(Total=sum(x, na.rm=FALSE), Mean=mean(x) SD=sd(x))) 

그리고 사용자의 프로토콜 수가 내에있는 경우 값을 1로 변환하는 또 다른 기능을 사용하려면 "평균 - < 수 < 3SD 평균이 + 3SD"

> nm1 <- setdiff(colnames(total), "row.names") 
output[,nm1] <-(res2$Mean-3SD[col(total[,nm1])] >total[,nm1] >res2$Mean-3SD[col(total[,nm1])])+0 

이인가 비교를위한 올바른 방법?

감사

편집 :

코드를 실행하는 동안, 그것은 보여줍니다

Error: unexpected symbol in "output[,nm1] <-(res2$Mean-3SD" 
+2

'출력'이 정의되지 않았습니다. 재현 가능한 예제를 제공해주십시오. 요약 된 값을 기반으로 원래의 데이터 세트에 새로운 컬럼을 추가하고자한다면,'aggregate'가 가장 좋은 툴이 아닐 수도 있습니다. 'ave'를 사용하거나'dplyr' 또는'data.table'로 쉽게 할 수 있습니다. – akrun

+1

'3 * SD ... '여야합니다. 그러나 재현 할 수있는 예는 훌륭합니다. –

+0

비교 결과가 새 테이블에 기록됩니다. : / –

답변

1

R은 <과 그 가족 A < B < C 같은 이중 불평등을 이해하지 않고는 이항 연산자입니다. 따라서 구문 상 유효하려면 위의 내용을 A < B & B < C으로 변환해야합니다.

지금, 당신은 재생 가능한 예제를 제공하지 않았다,하지만 귀하의 경우 라인

output[,nm1] <- (res2$Mean-3SD[col(total[,nm1])] > total[,nm1] > res2$Mean-3SD[col(total[,nm1])])+0 

뭔가

output[,nm1] <- 
(res2$Mean - 3*SD[col(total[,nm1])] > total[,nm1] & 
    total[,nm1] > res2$Mean - 3*SD[col(total[,nm1])]) + 0 

같은 지금까지 내가 말할 수 있어야한다. 그게 도움이 되니?

편집 : 또한 Roman Luštrik의 의견에서 명시 적 승수 *도 기억해야합니다.