2012-06-27 5 views
-1

행 단위로 측정 값이 저장된 데이터 프레임이 있습니다.R 행의 목록 별 평균 평균

Subject     Measurements 
1  s1 -0.4, -0.9, -1.1, -0.1, 0.1 
2  s2 -1.4, -1.7, -1.7, -0.6, -1.7 
3  s3 -1.0, -0.1, -0.6, -0.5, -0.1 
4  s4 -0.2, -0.5, -0.2, 0.1, -0.7 
5  s5 0.7, 0.2, 0.4, 0.7, 0.2 
6  s6 -0.3, -0.1, 0.1, -0.2, -0.1 

은 어떻게

가 여기에 데이터의 편집을 표준 편차/기타리스트 조작을 찾아 (예 : "의미")

데이터 프레임에 새 열 출력을 추가/보통 음주 내가 함께 일하고 있어요 구조 :

그것은 Measurements처럼 보이는
structure(list(Subject = structure(1:6, .Label = c("s1", "s2", 
"s3", "s4", "s5", "s6"), class = "factor"), Measurements = list(
c(-0.4, -0.9, -1.1, -0.1, 0.1), c(-1.4, -1.7, -1.7, -0.6, 
-1.7), c(-1, -0.1, -0.6, -0.5, -0.1), c(-0.2, -0.5, -0.2, 
0.1, -0.7), c(0.7, 0.2, 0.4, 0.7, 0.2), c(-0.3, -0.1, 0.1, 
-0.2, -0.1))), .Names = c("Subject", "Measurements"), row.names = c(NA, 
6L), class = "data.frame") 
+1

글쎄, 여기 실제 대답은 당신이 단순히 데이터를 그렇게 구성하면 안된다는 것입니다. 적절한 경우 NAs를 사용하여 여러 측정 열을 가져야합니다. 일단 데이터를 재구성하면 원하는 계산을하는 것이 쉽습니다. – joran

+0

이 양식에서 데이터를 분할 할 수 있습니까, 아니면 데이터를 읽는 초기 단계에서 개입해야합니까? – Amyunimus

+0

예, 내 대답을 참조하십시오. 내가 사용하는 관용구 ('do.call'와'rbind')는 초기 단계에서도 사용될 수 있습니다. – joran

답변

4

이 훨씬 쉬워집니다 : 당신은 자신의 열에서 각 측정이되면, 당신은 단순히 apply (또는 rowMeans가) 일부 유사한 기능을 OS 사용할 수 있습니다

dat<- structure(list(Subject = structure(1:6, .Label = c("s1", "s2", 
"s3", "s4", "s5", "s6"), class = "factor"), Measurements = list(
c(-0.4, -0.9, -1.1, -0.1, 0.1), c(-1.4, -1.7, -1.7, -0.6, 
-1.7), c(-1, -0.1, -0.6, -0.5, -0.1), c(-0.2, -0.5, -0.2, 
0.1, -0.7), c(0.7, 0.2, 0.4, 0.7, 0.2), c(-0.3, -0.1, 0.1, 
-0.2, -0.1))), .Names = c("Subject", "Measurements"), row.names = c(NA, 
6L), class = "data.frame") 

> dat <- data.frame(subject = dat$Subject,do.call(rbind,dat$Meas)) 
> dat$means <- apply(dat[,-1],1,mean) 
> dat 
    subject X1 X2 X3 X4 X5 means 
1  s1 -0.4 -0.9 -1.1 -0.1 0.1 -0.48 
2  s2 -1.4 -1.7 -1.7 -0.6 -1.7 -1.42 
3  s3 -1.0 -0.1 -0.6 -0.5 -0.1 -0.46 
4  s4 -0.2 -0.5 -0.2 0.1 -0.7 -0.30 
5  s5 0.7 0.2 0.4 0.7 0.2 0.44 
6  s6 -0.3 -0.1 0.1 -0.2 -0.1 -0.12 

.

4

은내에서 행렬3210 (df).

df$means <- rowMeans(df$Measurements) 

보다 일반적인 해결책으로는 주어진 기능에 대해 Margin = 1을 적용 할 수 있습니다. Measurements 실제로 정품 list했다

df$SDs <- apply(df$Measurements, 1, sd) 

경우 최대 성능을 제공하지만, 지금 SDs 열이에게 내가 갈 거라고 vector를 만들기 위해 그렇게 list입니다

df$SDs <- lapply(df$Measurements, sd) 

를 사용하십시오 .. .

df$SDs <- sapply(df$Measurements, sd) 

(목록이 포함 된 data.frame을 만든 경우에는 그렇게 보이지 않으므로 생각하지 않았습니다.) 처음에는 정말로 목록이었습니다). 보다 효율적으로 데이터를 저장하는 경우

+0

측정과 함께 작동하지 않습니다. 나는 당신이 내가하고있는 것을 볼 수 있도록 질문 구조를 추가했다. 그것은 – Amyunimus

+0

@Amyunimus라는 목록이고,'sapply' 메쏘드는 여러분의 데이터에 잘 작동 할 것이라고합니다. – A5C1D2H2I1M1N2O1R2T1