2015-04-23 94 views
2

我有製表符分隔的文本,其中第1列顯示轎廂,第2列有相應的命中。在下面的例子中,Car_1只有命中,而Car_3和Car_4分別命中2和3。它們被給出爲如下:在R中使用拆分功能拆分值列

>df 
    Car Hits 
    Car_1 omini|red|90% 
    Car_2 
    Car_3 Skoda|blue|97% 
      Audi|orange|96% 
      Ibiza|white|96% 
    Car_6 Honda|black|93% 
      BMW|blue|100% 

使得用於Car_3和Car_6多個命中被佈置在單個製表符分隔的行我想分裂的第二列像如下

>df 
    Car  Hits 
    Car_1 omini|red|90% 
    Car_2 
    Car_3 Skoda|blue|97% Audi|orange|96% Ibiza|white|96% 
    Car_6 honda|black|93% BMW|blue|100% 

我嘗試以下代碼在R但它沒有工作

>split(df,df$Hits) 

任何人都可以幫助我獲得所需的輸出。

預先感謝

回答

1

樣本數據:

df = data.frame(Cars = c("Car_1", "Car_2", "Car_3", "", "", "Car_6", ""), Hits = c("omini|red|90%", "", "Skoda|blue|97%", "Audi|orange|96%", "Ibiza|white|96%", "Honda|black|93%", "BMW|blue|100%")) 

P)

編輯 溶液


for(i in 1:dim(df)[1]){ if(df$Hits[i] != "" && df$Cars[i] == ""){ df$Cars[i] = df$Cars[i-1]}} 

required = aggregate(Hits ~ Cars, data = df, paste, collapse = " ") 
+0

通過使用上述命令,它將「|」到一個單獨的列中,但我想將單個行中的特定汽車的多個匹配分組。 – Dinesh

+0

不,我得到的是第2欄被分成三列,一列用於汽車名稱,另一列用於顏色,另一列用於百分比。我想要的是在單行中應用car_3和car_6的多個匹配中的每一個。 – Dinesh

+0

提供了一個可重複的例子,以避免混淆 –

1
df <- data.frame(car=c("Car_1", "Car_2","Car_3","Car_3","Car_3","Car_6","Car_6"), 
       Hits=c("omini|red|90%", "", "Skoda|blue|97%", "Audi|orange|96%", "Ibiza|white|96%", "Honda|black|93%","BMW|blue|100% ")) 

    > df 
     car   Hits 
    1 Car_1 omini|red|90% 
    2 Car_2     
    3 Car_3 Skoda|blue|97% 
    4 Car_3 Audi|orange|96% 
    5 Car_3 Ibiza|white|96% 
    6 Car_6 Honda|black|93% 
    7 Car_6 BMW|blue|100% 
    > ddply(data.frame(df), .(car), summarise,Names=paste(Hits, collapse=" ")) 
     car          Names 
    1 Car_1         omini|red|90% 
    2 Car_2            
    3 Car_3 Skoda|blue|97% Audi|orange|96% Ibiza|white|96% 
    4 Car_6     Honda|black|93% BMW|blue|100% 
+0

嗨Prasana,你的代碼它得到所需格式的輸出,而不是打印它在單行中的第二列的所有命中 – Dinesh

+0

@Dinesh,所需的格式 - 你問的問題是否達到。不知道你到底想要什麼 – RUser

+0

我明白你的觀點。 「寶馬|藍色| 100%」右側的「奧迪|橙色| 96%」和「伊維薩|白色| 96%」的右側也是Car_3的兩倍。如果我知道了那麼這將是容易的 – Dinesh