2015-04-23 131 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