【问题标题】:How to separate the variables of a particular column in a CSV file and write to a CSV file in R?如何分隔 CSV 文件中特定列的变量并写入 R 中的 CSV 文件?
【发布时间】:2014-02-26 02:05:54
【问题描述】:

我有一个像

这样的 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 新手,欢迎提供任何帮助。

【问题讨论】:

    标签: regex r csv


    【解决方案1】:
    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,尽管我很好奇是否有人想出了一些相对紧凑的基本选项。

    【讨论】:

    • 标题名称怎么放?
    • 解决方法不对,如何将信息写入CSV文件?
    • 解决方法不对???这是在这一点上开始敲我不会去read any intro manuals 的门,然后让你对你的免费建议负责,就好像我已经付了钱一样。我有点生气,甚至回答了这个问题。
    • @TylerRinker :从上述解决方案中,我得到了正确的结果,但是在写入 CSV 文件时,第一列永远不会出现?为什么?以及如何解决它。
    • 请提出一个新问题。
    【解决方案2】:

    这是一个使用基础 R 的解决方案。拆分字符串 Metro 上的 CampaignName 列,添加序列号作为名称。 stack 将其转换为包含indvalues 列的数据框,我们将其转换为DF1。通过DF1 的序列号和xx 的行号将其与xx 合并。将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)
    

    REVISED 以在海报修改问题以包含此类后处理额外的列。小幅改进。

    【讨论】:

    • 如果还有其他列,例如 Identity,CampaignName,Market,URL 如何也包含它们?提前感谢您的帮助。
    • 合并在这里不起作用,因为有很多“富国银行”
    • 问题已修改,请参考。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 2017-07-14
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    相关资源
    最近更新 更多