【问题标题】:Create new column after certain word in R在 R 中的某个单词之后创建新列
【发布时间】:2014-05-09 13:46:54
【问题描述】:

我有这样的数据列:

adrs <- data.frame(address=rbind(c("CONFIDENTIST s.r.o. Ul. pri,Panoráme 26 945 01   Komárno"),
                   c("PD Dobrá Niva, a.s. Námestie,SNP 217/2 962 61   Dobrá Niva")))

期望的结果是:

new <- data.frame(rbind(cbind("CONFIDENTIST s.r.o.","Ul. pri,Panoráme 26","945 01","Komárno"),
                  cbind("PD Dobrá Niva, a.s.","Námestie,SNP 217/2","962 61","Dobrá Niva")))
colnames(new) <- c("Name","Street","PSC","Town")  

更笼统地说:如何在出现特定单词后拆分和创建新列,在此示例中:在 s.r.o.a.s 之后。

【问题讨论】:

  • 您可能想研究正则表达式,但基于您有限的测试数据,这是一项非常困难的任务。您需要非常明确地了解违规规则。您需要非常非常清楚在文本中寻找什么来创建中断。
  • 当然,这就是我正在努力解决的问题,如何定义破坏规则。首先是在“a.s”和“s.r.o”这两个词之后,也可能是“962 61”重复出现。
  • 好吧,这不是我们能为您做的。您需要了解您的数据。如果您的规则只是“在 s.r.o 或 a.s. 之后拆分”那没关系。但是您的示例数据有其他拆分。您需要知道要拆分的每个可能的单词或要拆分的字母/数字模式。
  • 是的,我认为小型演示(不是完整的解决方案)会有助于获得想法。

标签: regex r string-split


【解决方案1】:

现在我可能会在s.r.o.a.s. 之后分手

strsplit(gsub("(.*(?:s\\.r\\.o\\.|a\\.s\\.))\\s+(.*)","\\1;\\2",adrs$address),";")

【讨论】:

  • 如果我对你的两个样本行和输出数据做出更多假设,这甚至可能是一个更完整的版本:strsplit(gsub("(.*(?:s\\.r\\.o\\.|a\\.s\\.))\\s+(.*)\\s+(\\d{3} \\d{2})\\s+(.*)","\\1\n\\2\n\\3\n\\4",adrs$address),"\n") 但这是做了很多假设。
猜你喜欢
  • 2021-04-14
  • 2020-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-19
  • 2022-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多