使用 R 中的拆分函数拆分值列
Splitting the values column using split function in R
我有制表符分隔的文本,其中第 1 列显示汽车,第 2 列有相应的匹配项。在下面的示例中,Car_1 只有命中,而 Car_3 和 Car_4 分别有 2 次和 3 次命中。它们给出如下:
>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)
任何人都可以帮助我获得所需的输出。
提前致谢
示例数据:
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 = " ")
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%
我有制表符分隔的文本,其中第 1 列显示汽车,第 2 列有相应的匹配项。在下面的示例中,Car_1 只有命中,而 Car_3 和 Car_4 分别有 2 次和 3 次命中。它们给出如下:
>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)
任何人都可以帮助我获得所需的输出。
提前致谢
示例数据:
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 = " ")
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%