簡體   English   中英

如何分離CSV文件中特定列的變量並寫入R中的CSV文件?

[英]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將其轉換為具有列indvalues的數據框,我們DF1這些列到DF1 通過DF1的序列號和xx的行號將xxxx合並。 Market移至DF2的前面並刪除indCampaignName 最后把它寫出來。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM