【发布时间】: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。有什么方法可以做到吗?
【问题讨论】:
-
最不明确的部分似乎是“加入相同的词,如停车位和停车场以及餐厅和餐厅” - 与
parkingspace和diningroom作为结果。你能更准确地表达规则吗?我们能否概括一下,如果有一个 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