[英]How to separate the variables of a particular column in a CSV file and write to a CSV file in R?
我有一個像CSV的文件
Market,CampaignName,Identity
Wells Fargo,Gary IN MetroChicago IL Metro,56
EMC,Los Angeles CA MetroBoston MA Metro,78
Apple,Cupertino CA Metro,68
所需輸出到CSV文件,第一行作為標題
Market,City,State,Identity
Wells Fargo,Gary,IN,56
Wells Fargo,Chicago,IL,56
EMC,Los Angeles,CA,78
EMC,Boston,MA,78
Apple,Cupertino,CA,68
res <-
gsub('(.*) ([A-Z]{2})*Metro (.*) ([A-Z]{2}) .*','\\1,\\2:\\3,\\4',
xx$Market)
如何修改上面的正則表達式以獲得R中的結果? R的新手,任何幫助表示贊賞。
library(stringr)
xx.to.split <- with(xx, setNames(gsub("Metro", "", as.character(CampaignName)), Market))
do.call(rbind, str_match_all(xx.to.split, "(.+?) ([A-Z]{2}) ?"))[, -1]
生產:
[,1] [,2]
Wells Fargo "Gary" "IN"
Wells Fargo "Chicago" "IL"
EMC "Los Angeles" "CA"
EMC "Boston" "MA"
Apple "Cupertino" "CA"
即使您在每個市場中擁有不同數量的Compaign Name,這也應該有效。 不幸的是,我認為基本選項很難實現,因為令人沮喪的是沒有gregexec
,盡管如果有人想出一些比較緊湊的東西,我會很好奇。
這是使用基礎R的解決方案。在字符串Metro
上拆分CampaignName
列,將序列Metro
添加為名稱。 stack
將其轉換為具有列ind
和values
的數據框,我們DF1
這些列到DF1
。 通過DF1
的序列號和xx
的行號將xx
與xx
合並。 將Market
移至DF2
的前面並刪除ind
和CampaignName
。 最后把它寫出來。
xx <- read.csv("Campaign.csv", as.is = TRUE)
s <- strsplit(xx$CampaignName, " Metro")
names(s) <- seq_along(s)
ss <- stack(s)
DF1 <- with(ss, data.frame(ind,
City = sub(" ..$", "", values),
State = sub(".* ", "", values)))
DF2 <- merge(DF1, xx, by.x = "ind", by.y = 0)
DF <- DF2[ c("Market", setdiff(names(DF2), c("ind", "Market", "CampaignName"))) ]
write.csv(DF, file = "myfile.csv", row.names = FALSE, quote = FALSE)
修訂版海報修改后的問題包括這樣來處理額外列。 小改進。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.