【发布时间】:2019-11-07 19:43:12
【问题描述】:
我有一个包含 DMA(指定市场区域)的数据集,但许多 DMA 显示为两个不同的级别,因为 DMA 被截断,例如DMA“Abilene-Sweetwater, TX”有时显示为“Abilene-Sweetw”
这是数据集的一个sn-p:
dma <- c("Abilene-Sweetw", "Abilene-Sweetwater, TX",
"Albany, GA", "Albany, GA",
"Albany-Schenec", "Albany-Schenec",
"Albany-Schenectady-Troy, NY", "Albany-Schenectady-Troy, NY")
cost <- c(0.46, 0.46, 0.45, 0.45, 0.32, 0.32, 0.32, 0.32)
DMA.df <- data.frame(dma, cost)
DMA.df
dma cost
1 Abilene-Sweetw 0.46
2 Abilene-Sweetwater, TX 0.46
3 Albany, GA 0.45
4 Albany, GA 0.45
5 Albany-Schenec 0.32
6 Albany-Schenec 0.32
7 Albany-Schenectady-Troy, NY 0.32
8 Albany-Schenectady-Troy, NY 0.32
在 SO 和其他地方的搜索出现了展示如何手动将多个因素水平合并为一个的解决方案。显然我不想手动执行此操作。
我正在寻找一种方法来修复截断的 DMA 并将其转换为“完整”DMA(城市-...-,州)。一个可取之处是截断有一个模式 - 它在 14 个字母处截断。该解决方案需要匹配所有 14 个字符,因为许多 DMA以开头的名称相同(例如“Albany, GA”和“Albany-..., NY”)。
换句话说,我需要找到所有与完整 DMA 匹配的截断 DMA,并将截断的 DMA变成完整的 DMA。
示例 DF 应如下所示:
dma cost
1 Abilene-Sweetwater, TX 0.46
2 Abilene-Sweetwater, TX 0.46
3 Albany, GA 0.45
4 Albany, GA 0.45
5 Albany-Schenectady-Troy, NY 0.32
6 Albany-Schenectady-Troy, NY 0.32
7 Albany-Schenectady-Troy, NY 0.32
8 Albany-Schenectady-Troy, NY 0.32
提前感谢您的任何建议。
【问题讨论】:
-
DMA.df$dma2 <- substring(DMF.df$dma, 1, 14)我认为您只需要截断所有内容...然后您就找到了匹配项,对吗? -
@cory - 感谢您的建议。将所有 DMA 截断为 14 个字母很容易,但我想将截断的 DMA 转换为“full”DMA。澄清一下,这是一个示例 DF,完整的 DF 包含超过 100M 行和 210 个 DMA(似乎所有长的行都被截断的匹配复制了)。
标签: r factors fuzzy-logic levels