2016-10-04 4 views
-1

아래에 설명 된 것과 같이 긴 문자열 (영숫자 + 특수 문자)로 구성된 문자 벡터가 있습니다. 필요R- 빈 문자열 요소에 도달 할 때까지 문자 벡터의 연속 요소를 반복적으로 결합합니다.

txt <- c(
     "Spicy jalapeno bacon ipsum dolor amet", 
     "tenderloin. pariatur quis", 
     "", 
     "consequat pancetta jerky", 
     "porchetta non chuck exercitation", 
     "laborum labore ball tip.", 
     "", 
     "", 
     "Duis swine turkey kielbasa. Strip ", 
     "steak ribeye laboris," 
     ) 

출력

> txt 
[1] "Spicy jalapeno bacon ipsum dolor amet tenderloin. pariatur quis" 
[2] "consequat pancetta jerky porchetta non chuck exercitation laborum labore ball tip." 
[3] "Duis swine turkey kielbasa. Strip steak ribeye laboris," 

상황이 고려하는 것입니다 : linebreakers로
1. 빈 문자열 요소/s의 역할을합니다. 그것들은 연속적으로 하나 이상일 수 있습니다.
2. 두 요소를 결합 할 때 사이에 공간을 추가해야합니다. 이 작업을 수행하는 방법의 과다의

+0

을 위해 잠시 그리고 만약 루프/문을 중첩을 통해 내 머리를 깨는 있었지만 실현 한 특히 주어, 그것을 할 수있는 더 좋은 방법이있을 수 있습니다 손에있는 많은 양의 데이터 (80,000 개 요소). –

답변

2

하나 :

library(dplyr) 
library(purrr) 

data_frame(txt=txt, grp=cumsum(txt=="")) %>% 
    group_by(grp) %>% 
    do(data_frame(joined=paste0(.$txt, collapse=" "))) %>% 
    mutate(joined=trimws(joined)) %>% 
    filter(joined != "") %>% 
    ungroup() %>% 
    select(joined) %>% 
    flatten_chr() 
## [1] "Spicy jalapeno bacon ipsum dolor amet tenderloin. pariatur quis"     
## [2] "consequat pancetta jerky porchetta non chuck exercitation laborum labore ball tip." 
## [3] "Duis swine turkey kielbasa. Strip steak ribeye laboris,"      
+0

내 생각의 정확한 기차! 매우 멋진 – Sotos

+0

이것은 굉장하다.. 감사합니다! 나는 이것을 이해하려고 노력하는 다음 시간을 보낼 것이다! –

+0

차가움. 살펴볼 핵심은'txt = ""'가 생성 한 다음''cumsum (txt == "")'이 생성하는 것입니다. 주저하지 말고 설명을 요청하십시오. – hrbrmstr