2017-04-21 10 views
1

我々は2列、1つの文字、1つの数値とのデータフレームがあるとします。を連結文字列の行

df <- data.frame(chr = letters[1:10], 
      ind = c(NA, NA, 1, NA, NA, 2, NA, NA, 3, NA)) 

    chr ind 
1 a NA 
2 b NA 
3 c 1 
4 d NA 
5 e NA 
6 f 2 
7 g NA 
8 h NA 
9 i 3 
10 j NA 

あなたがchr列の行はそれぞれの時間を取って貼り付けるだろうかindで非NAインデックス間の行だけ?私は無視最初の非NAまで、第1の行を必要

、我々は次に、「G」及び「Hを連結し、その後、我々は= 2 indが発生し、その後、「D」および「E」を連結し、= 1 indに遭遇します"など作成する:

newChar 
"d e" 
"g h" 
"j" 

forループなしでこれを行う方法はありますか?

+0

あなたが質問をし、分以内にあなたが解決策を考え出し、以下のすべてのコードを書き、それをここに掲載しましたか? – BigDataScientist

+0

いいえ、私は私の解決策は、他の人に利益をもたらすことが考えられ、その後、私はそれを解決することができなければならないと思った後、質問を書き、質問と回答の両方を掲載しました。それはSOの "法律"によると間違っていますか?教えてくださいと私はすべてを削除します。 –

+0

フェア十分です。私は規則を知らない、ちょうど私を混乱させた;) – BigDataScientist

答えて

1

OK、私はそれを得ました。トリックはNA値を埋めるためにzoo::na.locfを使用することで、その後group_bypaste

library(dplyr) 
library(zoo) 
df %>% 
    mutate(bool = is.na(ind), groupID = na.locf(ind, na.rm = FALSE)) %>% 
    filter(bool & !is.na(groupID)) %>% group_by(groupID) %>% 
    summarise(newChr = paste(chr, collapse = " ")) %>% 
    select(newChr)