2016-08-18 12 views
2

私は単純な問題があり、非常に複雑な(Cスタイリッシュな)ソリューションを見つけましたが、これよりはるかに単純な問題があるのだろうかと思います。 Iは、2つの配列を有する:R - 別の配列に基づいて文字列要素を連結する

y <- c("A","B","C","D","E") 
    d <- c(1,3,1) 

を、私は-(または任意の他のセパレータ)により分離yの要素を集約するので、分布dに基づい

"A","B-C-D","E" 

として配列を取得する必要があります。

私たちは「Y」一緒に「D」とpaste「Y」の要素によって複製さ「D」の順序でグループ化された上でtapplyを使用することができ、この

old_y <- y 
y <- NULL 

k <- 1 
for (i in 1:length(d)) { 
    y[i] <- as.character(old_y[k]) 
    j <- 1 
    while(d[i]>j) { 
    y[i] <- paste0(y[i], "-", as.character(old_y[k+j])) 
    j <- j + 1 
    } 
    k <- k + d[i] 
} 

答えて

4

をしました。

unname(tapply(y, rep(seq_along(d), d), FUN = paste, collapse="-")) 
#[1] "A"  "B-C-D" "E" 
+1

ワウ!単にうわー! :) – Stefano

関連する問題