2017-08-09 8 views
2

私はそれを利用する方法で自分の感情リストを構造化しようとしています。3列目と同じ値を共有する2つの列を結合する

私はこの1つのように構成されたデータフレーム、持っている:データフレームを取得するよう、私は「タイプ」の値は「車両」の欄にその値を追加することにしたい

df <- data.frame("vehicle" = c("car", "plane", "bicycle", "helicopter", "train"), 
       "Value" = c(0.5, 0.2, 0.1, -1, -0.7), 
       "type" = c("toyota, mercedes, whatever", "Airbus, Boeing", 
          "Mountain bike", "NA", "TGV, ICE")) 

をこのように:

dfdesired <- data.frame("vehicle" = c("car", "toyota", "mercedes", "whatever", "plane", "Airbus", 
             "Boeing", "bicycle", "Mountain bike", "helicopter", "train", "TGV", "ICE"), 
         "Value" =c(0.5, 0.5, 0.5, 0.5, 0.2, 0.2, 0.2, 0.1, 0.1, -1, -0.7, -0.7, -0.7)) 

誰もこれまでに同様の問題が発生しましたか?

ありがとうございます!

+0

'type'情報を含む新しい変数を持つ構造体は、より有益でしょうか?すべての 'vehicle'と' Value'情報が同じ 'type'の行のように? – LAP

+0

悲しいことに、私の場合、「タイプ」は異なる言葉を表し、これらの言葉の形になった形を「乗り物」にしています。だから私は型が列として存在することを望まない。 –

答えて

6

あなたがこれを行うことができますtidyr使用:

library(dplyr) 
library(tidyr) 
df %>% mutate (type2 = strsplit(paste0(vehicle,", ",type),", ")) %>% 
    unnest(type2) %>% 
    select(vehicle = type2, Value) 

     vehicle Value 
1   car 0.5 
2   toyota 0.5 
3  mercedes 0.5 
4  whatever 0.5 
5   plane 0.2 
6   Airbus 0.2 
7   Boeing 0.2 
8  bicycle 0.1 
9 Mountain bike 0.1 
10 helicopter -1.0 
11   train -0.7 
12   TGV -0.7 
13   ICE -0.7 

だから最初に我々は、我々はlistに文字列を分割し、type文字列にvehicleを追加します。この時点では、リストの列を含むdata.frameがあり、リスト項目ごとに1行を取得してから、希望の列を選択するためにunnestを使用します。

+0

これは何とか元のデータフレームの変数の約90%を「唯一」扱っていましたが、残っている変数はカンマで区切られた変数ですが、あなたのソリューションはうまくいきました。 他の変数の場合データセット自体に問題があるかどうかを確認します –

+0

問題を丸で囲むことができれば、あなたの投稿にあなたのデータの編集を追加できます一見。それは、コンマの隣に空白が常にあるとは限らず、特別なスペース(通常のスペース文字ではない)を持っているとは限りません。 –

+1

これはまさにそのケースでした。再度、感謝します!問題が解決しました! :) –

関連する問題