2014-07-13 3 views
1

다음과 같은 데이터가 있습니다.조건에 따라 행의 텍스트 연결

a <- structure(list(Title = c("AAADE", "BBBCF", "NBNJHB", "TTTTT", "VVVFF", 
"AASFE", "DDDFFF", "ERFRR", "AAAAAA", "ERERE"), 
Year = c("2004", "2004", "2004", "2004", "2004", "2004", "2005", "2005", "2005", "2005")), 
.Names = c("Title", "Year"), row.names = c(NA, -10L), class = "data.frame") 
a 
    Title Year 
1 AAADE 2004 
2 BBBCF 2004 
3 NBNJHB 2004 
4 TTTTT 2004 
5 VVVFF 2004 
6 AASFE 2004 
7 DDDFFF 2005 
8 ERFRR 2005 
9 AAAAAA 2005 
10 ERERE 2005 

같은 해를 기준으로 행을 연결하려고합니다. 나는 'tm'패키지 함수를 사용하려고 노력하고 있는데, 다음과 같이 할 수 없다.

Title          Year  
AAADE BBBCF NBNJHB TTTTT VVVFF AASFE  2004 
DDDFFF ERFRR AAAAAA ERERE     2005 

답변

2
with(a, data.frame(Title = tapply(Title, Year, paste, collapse = ' '), Year = unique(Year))) 

는 결과 :

       Title Year 
AAADE BBBCF NBNJHB TTTTT VVVFF AASFE 2004 
      DDDFFF ERFRR AAAAAA ERERE 2005 
3

더 직접적인 접근 방식은 aggregate을 사용하는 것입니다 : 컬럼의 순서가 중요한 경우가 aggregate(Title ~ Year, a, paste, collapse = " ")[names(a)]을 할 수

aggregate(Title ~ Year, a, paste, collapse = " ") 
# Year        Title 
# 1 2004 AAADE BBBCF NBNJHB TTTTT VVVFF AASFE 
# 2 2005   DDDFFF ERFRR AAAAAA ERERE 

.

aggregate에서 올라와 보면 "data.table"과 "dplyr"을 볼 수 있습니다. 둘 다 큰 데이터 세트의 경우 더 효율적입니다.

여기에 "dplyr"입니다 :

library(dplyr) 
a %>% group_by(Year) %>% summarise(Title = paste(Title, collapse = " ")) 
# Source: local data frame [2 x 2] 
# 
# Year        Title 
# 1 2004 AAADE BBBCF NBNJHB TTTTT VVVFF AASFE 
# 2 2005   DDDFFF ERFRR AAAAAA ERERE 

여기에 "data.table"입니다 :

library(data.table) 
A <- as.data.table(a) 
A[, list(Title = paste(Title, collapse = " ")), by = Year] 
# Year        Title 
# 1: 2004 AAADE BBBCF NBNJHB TTTTT VVVFF AASFE 
# 2: 2005   DDDFFF ERFRR AAAAAA ERERE