2017-08-09 51 views
2

我試圖以我可以利用它的方式構建我的情感列表。將與第三列共享相同值的兩列組合起來

我有一個數據幀,其被構造爲這樣:

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'信息的新變量的結構會不會更有用?就像每個'type'都有一行,它們都有相同的'vehicle'和'Value'信息? – LAP

+0

可悲的是,因爲在我的情況下,「類型」代表了不同的單詞和「車輛」這些詞的詞幹形式,這正是我爲什麼不能與該框架一起工作的原因。所以我不希望類型存在anylonger作爲一個列。 –

回答

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 

所以首先我們添加vehicletype字符串,那麼我們分割字符串成list。此時我們有一個data.frame,它包含一列列表,我們使用unnest來獲得一行一行的列表項,然後選擇我們想要的列。

+0

這在某種程度上適用於原始數據框中「僅」約90%的變量,其餘部分仍然是一個變量,許多單詞之間用逗號分隔,但您的解決方案正常運行,非常感謝您。 對於其他變量我會檢查數據集本身是否有問題 –

+0

如果您可以設法圈出問題並添加數據輸入作爲對帖子的編輯,我會採用看看。這可能是因爲你在逗號旁邊並不總是有空格,或者你有一些特殊的空格(而不是普通的空格字符)。 –

+1

就是這樣。再次感謝!問題解決了! :) –

相關問題