2016-06-22 3 views
1

목록을 변경하는 올바른 방법은 무엇입니까? (그룹화 VAR은 내가 SelfEsteem의 분산 각 그룹을 계산하려는 : 의견 된 답변목록에서 mutate를 사용하는 방법?

Error in UseMethod("mutate_") : 
    no applicable method for 'mutate_' applied to an object of class "list" 

UPDATE :이 특정 경우 목록

library(dplyr) 
csv<-data.frame(participant_number=c(1,1,1,2,2),SelfEsteem=c(3,4,2,1,3)) 
csv<-csv%>%split(.,.$participant_number)%>%mutate(.,var(.$SelfEsteem)) 

는 오류 split에 의해 반환되는 participant_number). 내가 시도하면 group_by 나는 기대되는 결과를 얻지 못한다. ... .. 왜?

library(dplyr) 

#Please note I changed the dataframe to make my point about variance differences more obvious 
csv<-data.frame(participant_number=c(1,1,1,2,2),SelfEsteem=c(3,4,2,1,3)) 

csv<-csv%>%group_by(participant_number)%>%mutate(.,SE_variance=var(.$SelfEsteem)) 

#var(c(3,4,2)) #1 
#var(c(1,3)) #2 

예상 : 당신이 mutate의 검색 경로를 무시하기 때문에

 participant_number SelfEsteem SE_variance 
(dbl)   (dbl)  (dbl) 
1     1   3   1 
2     1   4   1 
3     1   2   1 
4     2   1   2 
5     2   3   2 
+1

'dplyr'의 'd'는 데이터 프레임 용입니다. 리스트의 각 데이터 프레임을 변경하려면'lapply', for 루프 또는'purr' 패키지의 각 데이터 프레임에 다른 작업을 수행하는 것과 같은 방식으로 작업하십시오. – Gregor

+2

당신의보기에서, 왜 당신은 "쪼개지"는 것을 귀찮게합니까? 대신'group_by'를 사용하고 하나의 데이터 프레임으로 유지하십시오. – Gregor

+0

각 목록마다 다른 돌연변이를 적용 하시겠습니까? – zx8754

답변

3

group_by와 귀하의 시도가 실패합니다. Mutate는 비표준 평가를 사용하기 때문에 인수의 열 중에서 먼저 변수를 찾고 data 인수를 찾습니다. 만약 파이프 (%>%)를 사용하면

는 도트 .에 전체 데이터 프레임을 지칭하고 .$SelfEsteem전체 데이터 프레임으로부터의 전체 자존감 컬럼을 의미한다.

예상 결과를 얻으려면 기본값을 단순화하기 만하면됩니다. 지금

library(dplyr) 
library(purr) 

csv %>% 
    split(.,.$participant_number) # your list 
    map(~mutate(.,var(.$SelfEsteem))) # this will mutate a list 

을 당신은 bind_rows()

csv %>% 
    split(.,.$participant_number) %>% 
    map(~mutate(.,var(.$SelfEsteem))) %>% 
    bind_rows() 

과 함께 다시 모든 것을 넣을 수 있습니다 : 당신이 정말 list 객체를 사용해야하는 경우

csv %>% 
    group_by(participant_number) %>% 
    mutate(SE_variance = var(SelfEsteem)) 
# Source: local data frame [5 x 3] 
# Groups: participant_number [2] 
# 
# participant_number SelfEsteem SE_variance 
#    (dbl)  (dbl)  (dbl) 
# 1     1   3   1 
# 2     1   4   1 
# 3     1   2   1 
# 4     2   1   2 
# 5     2   3   2 
1

, 당신은 map를 사용하여 listmutate 수 있습니다 너는 네가 필요한 것을 얻는다.

관련 문제