2014-02-25 31 views
2

我有一個CSV文件像如何分隔CSV中的一行並在R中生成另一個CSV文件?

AdvertiserName,CampaignName 
Wells Fargo,Gary IN MetroChicago IL Metro 
EMC,Los Angeles CA MetroBoston MA Metro 
Apple,Cupertino CA Metro 

所需的輸出中的R

AdvertiserName,City,State 
Wells Fargo,Gary,IN 
Wells Fargo,Chicago,IL 
EMC,Los Angeles,CA 
EMC,Boston,MA 
Apple,Cupertino,CA 

我做它像

record <- read.csv("C:/Users/Administrator/Downloads/Campaignname.csv",header=TRUE) 
ad <- record$AdvertiserName 
camp <- record$CampaignName 
read.table(text=gsub('Metro', '\n', c), col.names=c('City', 'State')) 

它拋出一個錯誤。

如何獲得期望的結果? 在此先感謝。

回答

2

比如,你可以這樣做:

## read the csv file, you change text here by your fileName 
xx <- read.table(text ='AdvertiserName,CampaignName 
Wells Fargo,Gary INMetro Chicago IL Metro 
EMC,Los Angeles CAMetro Boston MA Metro',sep=',',header=TRUE) 

## use regular expression to create city and state variables 
## rows are separated by ":" 
## columns are separated by a comma "," 
res <- 
gsub('(.*) ([A-Z]{2})*Metro (.*) ([A-Z]{2}) .*','\\1,\\2:\\3,\\4', 
    xx$CampaignName) 
## Use strsrsplit to extract rows and columns 
## This is a compacted code ! 
yy <- 
Map(function(x,y) 
     cbind.data.frame(y,do.call(rbind,strsplit(x,','))), 
     strsplit(res,':'),xx$AdvertiserName) 
## create the final data.frame and set names 
res <- do.call(rbind,yy) 
setNames(res, c('AdvertiserName','City','State')) 

    AdvertiserName  City State 
1 Wells Fargo  Gary IN 
2 Wells Fargo  Chicago IL 
3   EMC Los Angeles CA 
4   EMC  Boston MA 
+0

那其他兩個城市? – user3188390

+0

@ user3188390我更新了我的答案。這是難度比我想:) – agstudy

+0

@astudy謝謝,從我哪裏會去了解這些東西,新R,有什麼建議? – user3188390

相關問題