2014-10-14 2 views
0

고유 한 값을 기반으로 데이터 프레임의 열에서 평균값을 얻으려고합니다. 그래서이 칼럼에서 칼럼 b와 칼럼 c의 의미를 얻으려고 시도하는 것은 칼럼 a의 고유 한 값을 기반으로합니다. 나는 (a)가 a의 고유 한 값으로 계산할 것이라고 생각했지만 (a의 고유 한 값을 제공함) 전체 b 또는 c 열의 평균을 나타냅니다.ddply에서 회전 변수

df2<-data.frame(a=seq(1:5),b=c(1:10), c=c(11:20))  
simVars <- c("b", "c") 
for (var in simVars){ 
print(var) 

dat = ddply(df2, .(a), summarize, mean_val = mean(df2[[var]])) ## my script 
assign(var, dat) 

} 
c 

a mean_val 
1  15.5 
2  15.5 
3  15.5 
4  15.5 
5  15.5 

열의 고유 값을 기준으로 평균을 취할 수있는 방법은 무엇입니까?

감사합니다.

+1

데이터 프레임을 다시 지정하지 마십시오. mean_val = mean (df2 [[var]])이 아닌'mean_val = mean (var)'입니다. – Gregor

+0

mean_val = mean (var)로 바꾸면 작동하지 않습니다. mean.default (var)에서 오류를 반환합니다. 인수가 숫자 또는 논리가 아니므로 NA를 반환합니다. – kingmidaz

+0

mean_val 열이 틀린 것을 제외하고는 원하는 출력이 위의 표와 같습니다. 그것은 c 열에있는 모든 값에 대해 평균을 취하고 있습니다. 그러나 c 열의 값은 a = 1, c 열의 값을 의미합니다. 여기서 a = 2, c 열의 값을 의미합니다. 여기서 a = 3, 등 내가 원하는 : dat = ddply (df2,. (a), 요약, mean_val = mean (c))하지만 mean (c) mean (var)은 0이 아니기 때문에 작동합니다. – kingmidaz

답변

0

루프가 필요하지 않습니다. ddply에 대한 단일 호출 내에서 bc의 평균을 계산하면 수단은 a의 각 값에 대해 개별적으로 계산됩니다. 그리고, @Gregor 말했듯이, 당신은 mean() 내부의 데이터 프레임의 이름을 다시 지정할 필요가 없습니다 :

ddply(df2, .(a), summarise, 
     mean_b=mean(b), 
     mean_c=mean(c)) 

    a mean_b mean_c 
1 1 3.5 13.5 
2 2 4.5 14.5 
3 3 5.5 15.5 
4 4 6.5 16.5 
5 5 7.5 17.5 

UPDATE :

# Add a few additional columns to the data frame 
df2 = data.frame(a=seq(1:5),b=c(1:10), c=c(11:20), d=c(21:30), e=c(31:40)) 

# New data frame with means by each level of column a 
library(dplyr) 
dfmeans = df2 %>% 
    group_by(a) %>% 
    summarise_each(funs(mean)) 

# Separate each column of means into a separate data frame and store it in a list: 
means.list = lapply(names(dfmeans)[-1], function(x) { 
    cbind(dfmeans[,"a"], dfmeans[,x]) 
}) 

means.list 

[[1]] 
    a b 
1 1 3.5 
2 2 4.5 
3 3 5.5 
4 4 6.5 
5 5 7.5 

[[2]] 
    a c 
1 1 13.5 
2 2 14.5 
3 3 15.5 
4 4 16.5 
5 5 17.5 

[[3]] 
    a d 
1 1 23.5 
2 2 24.5 
3 3 25.5 
4 4 26.5 
5 5 27.5 

[[4]] 
    a e 
1 1 33.5 
2 2 34.5 
3 3 35.5 
4 4 36.5 
5 5 37.5 
:
수단의 각 열에 대한 별도의 데이터 프레임을 얻으려면
+0

실제 작업에는 8 개의 변수가 있으며, 다른 데이터 프레임에서 필요합니다. 그래서 나는 ab - ddply (df2, .a)를 피하기 위해 노력하고 있는데, ac_ddply (df2, .a), summarize, mean_b = mean (c)) , ad <- ddply (df2,. (a), summarize, mean_b = mean (d)) 등입니다. 그래서 for 루프를 통해 변수를 찾아 개별 데이터 프레임을 만듭니다. 그리고 data.f <- ddply (df2,. (a), summarize, mean_b = mean (var))가 작동하지 않습니다. 거기에 변수를 가져올 수 없습니다. – kingmidaz

+0

위대한, 그게 많이 도움이됩니다. 그러나이 데이터 프레임의 이름은 무엇이며 어떻게 액세스하고 나중에 가져올 수 있습니까? 감사! – kingmidaz

+0

리스트가'means.list'라고 불리는 경우, 예를 들어리스트에서 두번째 데이터 프레임을 얻으려면 means.list [[2]]'를 쓰면됩니다. 또한 목록 요소에 더 많은 설명이 포함 된 이름을 지정할 수 있습니다. 예를 들어,'names (means.list) = names (dfmeans [2 : 5])'. 그런 다음, 'e'열의 수단을 포함하는 데이터 프레임을 참조하려면, means.list [[ "e"]]'를 수행하십시오. – eipi10