2017-08-09 79 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

就是这样。再次感谢!问题解决了! :) –

相关问题