【问题标题】:Converting comma separated list to dummy variables将逗号分隔的列表转换为虚拟变量
【发布时间】:2017-07-10 09:55:59
【问题描述】:

我有一张如下表:

yel <- data.table(id=c(1,2,3))
yel$names[1] <- "\"parking space\", \"dining\", \"3bh\""
yel$names[2] <- "\"parking\" , \"outdoor\""
yel$names[3] <- "\"Hello!\",\"dining room\",\"3bh\""
yel

   id                            names
1:  1 "parking space", "dining", "3bh"
2:  2            "parking" , "outdoor"
3:  3     "Hello!","dining room","3bh"

我要对 names 变量进行虚拟化,并加入相同的词,例如停车位和停车场以及餐厅和餐厅。

我想要如下虚拟变量:parking、dining、3bh、outdoor、hello。有什么方法可以做到吗?

【问题讨论】:

  • 最不明确的部分似乎是“加入相同的词,如停车位和停车场以及餐厅和餐厅” - 与parkingspacediningroom作为结果。你能更准确地表达规则吗?我们能否概括一下,如果有一个 2 词短语,任何匹配第一个词的条目也应该得到第二个词,然后应该删除空格?有没有第二个词不同的情况?如果"parking space""parking lot" 同时存在会怎样?
  • @Gregor 很抱歉不清楚。我想将其改写为“将“停车位”和“停车场”等相似词加入“停车”。这有帮助吗?
  • 如果数据这么简单,那么你可以去掉第一个单词之后的所有内容。也许像library(splitstackshape); dcast(cSplit(yel, "names", ",", "long")[, names := gsub('\\"| .*', "", names)], id ~ names, fun.aggregate = length)这样的东西?
  • @A5C1D2H2I1M1N2O1R2T1 大部分数据都很简单,除了少数异常情况,例如“屋顶”“屋顶甲板顶部”“屋顶甲板顶部”
  • @ManishRanjan,那么也许您需要查看agrep 或类似的东西。您应该从您想用作虚拟词的单词列表开始,并且可能进行一些初步的数据清理以使任务更容易。

标签: r regex string-matching dummy-variable


【解决方案1】:

这个怎么样(正则表达式可能仍需要稍作调整——看起来不够通用)。使用tidyr

separate_rows(yel,names,sep=",")->df1
df1 %>% mutate(newnames=gsub('\\"| space|\\!| |room', "", names))

  id           names newnames
1  1 "parking space"  parking
2  1        "dining"   dining
3  1           "3bh"      3bh
4  2      "parking"   parking
5  2       "outdoor"  outdoor
6  3        "Hello!"    Hello
7  3   "dining room"   dining
8  3           "3bh"      3bh

【讨论】:

  • 非常感谢
猜你喜欢
  • 2023-03-22
  • 2018-05-27
  • 2022-11-02
  • 2021-12-27
  • 1970-01-01
  • 2016-10-24
相关资源
最近更新 更多