如何将包含可解析字段的字符串添加到可添加到数据框的列中

时间:2017-08-27 01:25:45

标签: r grep tidyr

我有一个数据框。在数据帧的每一行中,最后一列是一个字符串(名为data_listing)。 data_listing字符串本身是一系列由逗号分隔的键:值对。以下是其中一个字符串的示例:

> data_listing[1:2]
[1] "id:4006422,memberId:2932850,price:999,make:Chevrolet,model:Cobalt,makeYear:2009,trim:LT,mileage:142000,sellerType:For Sale By Owner,dealerOptions:null,index:2"                                                                                                                                                                                                                                                                               
[2] "id:3987513,memberId:67473,price:26799,make:Audi,model:S5,makeYear:2013,trim:Prestige,mileage:44673,sellerType:Dealership,dealerOptions:{options:{VDPcarousel:true,allowUsed:true,calculator:true,carFaxIntegration:true,featuredCarousel:true,feed:true,homepageSpotlight:0,inlineSpotlight:11,limit:-1,map:true,monsterAds:true,pop:2,priceReduced:true,refresh:7,wrap:true,chat:false,inventoryComparison:true,standardFeatured:3}},index:3"

我想在数据框中为data_listing字符串中的每个值创建一个列。每列将使用键值作为其名称。

如果我运行strsplit(data_listing, ","),那么我会得到一个字符串列表。每个列表元素都包含一个字符向量" key:value"对

我犹豫写一个for循环来grep每个子列表元素并将值添加到原始数据框中的各个列,但这是我能弄清楚如何执行此操作的唯一方法。

我已经看过transform和tidyr::separate(),但是这些都有助于为字符串中的单个项目进行greping,而不是28个值。

你会如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

我会做这样的事情:

maplist=df[['domain']].drop_duplicates(keep='first').reset_index(drop=True).reset_index().set_index('domain')
maplist['index']=maplist['index']+1
df.domain=df.domain.map(maplist['index'])
   Out[177]: 
   type  domain
0     1       1
1     1       2
2     0       2
3     0       3
4     0       2
5     0       3
6     1       4
7     1       5
8     1       4
9     1       4