>

다음 데이터 (df)에 문제가 있습니다

1                                                  TeamA     1
2                                                  TeamB     2
3                                                  TeamC     3
4                                                  TeamA     4
5                                                  TeamB     5
6                                                  TeamC     6
7                                                  TeamA     7
8                                                  TeamB     8
9                                                  TeamD     9
10                                                 TeamD    10

팀의 결과를 붙여 넣는 열을 추가하고 싶습니다. 새로운 칼럼은 다음과 같습니다. 내 데이터가 작지 않기 때문에 for 루프가 수행하지 않습니다.

1                                                  TeamA     1     1-4-7 
2                                                  TeamB     2     2-5-8
3                                                  TeamC     3     3-6
4                                                  TeamA     4     1-4-7  
5                                                  TeamB     5     2-5-8
6                                                  TeamC     6     3-6
7                                                  TeamA     7     1-4-7 
8                                                  TeamB     8     2-5-8
9                                                  TeamD     9     9-10
10                                                 TeamD    10     9-10

원본 데이터에는 내가 사용할 수있는 팀 패턴이 없습니다. group_by 와 함께 작동해야한다고 생각합니다.  dplyr에서하지만 나는 그것을 할 수 없었습니다.


  • 답변 # 1

    ave 사용  이렇게 :

    transform(DF, new = ave(No, Team, FUN = function(x) paste(x, collapse = "-")))
    
    

    주는 :

       Team No   new
    1  TeamA  1 1-4-7
    2  TeamB  2 2-5-8
    3  TeamC  3   3-6
    4  TeamA  4 1-4-7
    5  TeamB  5 2-5-8
    6  TeamC  6   3-6
    7  TeamA  7 1-4-7
    8  TeamB  8 2-5-8
    9  TeamD  9  9-10
    10 TeamD 10  9-10
    
    

    또는 dplyr 사용 :

    library(dplyr)
    DF %>% 
       group_by(Team) %>% 
       mutate(new = paste(No, collapse = "-")) %>% 
       ungroup
    
    
    참고

    입력 DF  재현 가능한 형태로 :

    Lines <- "
    TeamA     1
    TeamB     2
    TeamC     3
    TeamA     4
    TeamB     5
    TeamC     6
    TeamA     7
    TeamB     8
    TeamD     9
    TeamD    10"
    DF <- read.table(text = Lines, as.is = TRUE, col.names = c("Team", "No"))
    
    

  • 답변 # 2

    와이즈 비즈 그런 다음 aggregate  원래 merge 에  정렬 :

    data.frame
    
    
    df <- read.table(text="1 TeamA 1 2 TeamB 2 3 TeamC 3 4 TeamA 4 5 TeamB 5 6 TeamC 6 7 TeamA 7 8 TeamB 8 9 TeamD 9 10 TeamD 10",h=F,strin=F) aggregated_scores <- aggregate(V3 ~ V2,df,paste,collapse='-') new_df <- merge(df[-3],aggregated_scores) new_df <- new_df[order(new_df$V1),] # V2 V1 V3 # 1 TeamA 1 1-4-7 # 4 TeamB 2 2-5-8 # 8 TeamC 3 3-6 # 3 TeamA 4 1-4-7 # 5 TeamB 5 2-5-8 # 7 TeamC 6 3-6 # 2 TeamA 7 1-4-7 # 6 TeamB 8 2-5-8 # 9 TeamD 9 9-10 # 10 TeamD 10 9-10

  • 이전 python - 정렬 된 배열 이름을 반환하는 방법?
  • 다음 Java의 변수 범위 및 가시성