2017-11-16 2 views
0

첫 번째 열의 값을 기준으로 한 값으로 새 열을 만드는 방법을 찾고 있는데, 같은 클러스터에서 가장 높은 점수를 얻습니다.다른 열을 기반으로 열 만들기 값

목표는이에서 이동하는 것입니다 : 여기에

WORD  | SCORE | Cluster | 
diptyqu | 19750 | 1 | 
daptyqu | 8830 | 1 | 
dyptiqu | 29 | 1 | 
deptiqu | 2  | 1 | 
parfume | 300 | 2 | 
parfum | 14 | 2 | 

:

WORD  | SCORE | Cluster | Name | 
diptyqu | 19750 | 1 | diptyqu | 
daptyqu | 8830 | 1 | diptyqu | 
dyptiqu | 29 | 1 | diptyqu | 
deptiqu | 2  | 1 | diptyqu | 
parfume | 300 | 2 | parfume | 
parfum | 14 | 2 | parfume | 

내가 litteraly 붙어있어 정말 그것을 확인하는 방법을 모르겠어요. 이 방법에 대한 제안이 있습니까? 그것은 당신의 행이 이미 SCORE으로 분류되어 가정 dplyr

your_data %>% 
    group_by(cluster) %>% 
    mutate(Name = first(WORD)) 

를 사용

답변

3

. @ 같이 그레고르의 dplyr 솔루션을

your_data %>% 
    group_by(cluster) %>% 
    arrange(desc(SCORE)) %>% 
    mutate(Name = first(WORD)) 
+0

감사합니다. Gregor에게 감사의 말씀을 전합니다. – Remi

2

비슷한 전략을하지만, data.table를 사용 : 필요한 경우, 당신은 너무 정렬 것을 할 수

library(data.table) 
setDT(d) 
d[order(SCORE), Name := tail(WORD, 1), Cluster] 
1
do.call(rbind, 
     lapply(split(dat, dat$Cluster), function(a) 
      data.frame(a, Name = a$WORD[which.max(a$SCORE)]))) 
#  WORD SCORE Cluster Name 
#1.1 diptyqu 19750  1 diptyqu 
#1.2 daptyqu 8830  1 diptyqu 
#1.3 dyptiqu 29  1 diptyqu 
#1.4 deptiqu  2  1 diptyqu 
#2.5 parfume 300  2 parfume 
#2.6 parfum 14  2 parfume 
0
당신은 'data.table'패키지를 사용할 수 있습니다

및 병합 함수 :

library(data.table) 
    df2 <- setDT(df)[, .SD[which.max(SCORE)], Cluster] 
    result <- merge(df, df2[, c('Cluster', 'WORD')], by='Cluster') 
관련 문제