2017-12-16 27 views
0

데이터 프레임 df가 있고 두 번째 컬럼의 그룹에 의해 최소값으로 새로운 컬럼을 채우고 싶습니다. 이전 게시물은 데이터 프레임의 원래 행과 열을 유지하면서 새 열을 만드는 맥락에서이 문제를 해결하지 못합니다.다른 컬럼의 그룹에 의해 최소값으로부터 mutate 값을 가진 새로운 컬럼을 생성하십시오.

df %>% group_by(a) %>% mutate(Min_b = min(b, na.rm = TRUE)) 

a b Min_b 
1 NA 1   
1 1 1   
1 2 1   
1 2 1   
2 3 1   
2 5 1   
2 6 1   
2 NA 1  

위는 제공 :

여기
a b Min_b 
1 NA 1   
1 1 1   
1 2 1   
1 2 1   
2 3 3   
2 5 3   
2 6 3   
2 NA 3  

는 해당 출력 내 시도입니다 : 내가 달성하고자하는 것은이 출력

a <- c(1,1,1,1,2,2,2,2) 
b <- c(NA,1,2,2,3,5,6,NA) 
df <- data.frame(a,b) 
df 

a b 
1 NA   
1 1   
1 2   
1 2   
2 3   
2 5   
2 6   
2 NA   

:

은이 샘플 입력을 가정 나 열의 그룹에 의해 열 b의 최소보다는 오히려 열 b의 최소, (ie, 나는 후자를 원한다).

df %>% group_by(a) %>% top_n(-1, wt = b) 

a b 
1 1 
2 3 

올바른 값을 찾을 수 있지만, 다음과 같이 개의 mutate 내에서 작동하지 않는 것 같습니다에 대한 위의 작품

:

df1 %>% group_by(a) %>% mutate(Min_of_b = top_n(-1, wt = b)) 

Error in is_scalar_integerish(n) : argument "n" is missing, with no default 

이 작업을 수행하는 다른 방법에 대한 어떤 제안 주셔서 감사합니다!

+0

그것은에 우리에게 훨씬 쉬울 것 질문에 샘플 데이터를 제공했다면 도움이 될 것입니다. 아마도'dput (head (df)) '처럼 간단 할 것입니다. 또한 예상되는 출력이 어떻게 생겼는지는 분명하지 않습니다. – r2evans

+0

당신의 이상적인 출력을 기대하는 방법이 명확하지 않지만, 당신이 말한 것에 근거하여 대신 df %> % group_by (id) %> % mutate (new_column = min (second_column))'를 사용해야한다고 생각합니다. – AntoniosK

+0

패키지 버전을 확인 하시겠습니까? 'df %> % group_by (a) %> % mutate (Min_b = min (b, na.rm = TRUE))'나를 위해 일합니다 .... – A5C1D2H2I1M1N2O1R2T1

답변

0

나는 나의 오류를 알아 냈습니다. dplyr을로드 한 후 plyr을로드했을 가능성이있어 group_by가 잘못 작동합니다. 이 문제를 해결하려면, 나는 다음과 분리 plyr 같이

detach(package:plyr) 
내 GROUP_BY 다음 (위와 같은 dataframe 주어진) 다음 코드를 제대로 작동

:

df %>% group_by(a) %>% mutate(Min_b = min(b, na.rm = TRUE)) 

a b Min_b 
1 NA 1   
1 1 1   
1 2 1   
1 2 1   
2 3 3   
2 5 3   
2 6 3   
2 NA 3