除了编程之外,我还迷失了解决此问题的正确方法。我有2个带有市场名称列的数据框。不幸的是,名称在每一列中都有一些字符/符号,例如Albany.Schenectady.Troy = ALBANY,Boston.Manchester = BOSTON。
我想在两个数据框中都标准化市场名称,以便以后可以执行merge
操作。
我想分两个步骤解决该问题:1)从两个表中创建唯一市场名称的向量,并使用该向量来创建查找表。看起来像这样:
表1市场>“ Albany.Schenectady.Troy”,“ Albuquerque.Santa.Fe”,“ Atlanta”。。。。
Table2市场>“ SPOKANE”,“ BOSTON”。。。
我试过了,marketnamesvector <- paste(unique(Table1$Market, sep = "", collapse = ","))
但是没有产生想要的输出。
2)将表2中的市场名称更改为表1中的等效市场名称。对于表1中没有的任何市场名称,表2应保留相同的市场名称值。
我知道我可以使用如下所示的循环功能,但我仍然需要一个查找表。
replacefunc <- function (data, oldvalue, newvalue) { newdata <- data for (i in unique(oldvalue)) newdata[data == i] <- newvalue[oldvalue == i] newdata }
表1:此表是90行x 2列,具有90个唯一的市场名称。
Market Leads Investment Leads1 Leads2 Leads3
1 Albany.Schenectady.Troy NA NA NA NA NA
2 Albuquerque.Santa.Fe NA NA NA NA NA
3 Atlanta NA NA NA NA NA
4 Austin NA NA NA NA NA
5 Baltimore NA NA NA NA NA
表2:此表是15万行x 20列,具有89个唯一的市场名称。
> df
Spot.ID Date Hour Time Local.Date Broadcast.Week Local.Hour Local.Time Market
2 13072765 6/30/14 0 12:40 AM 2014-06-29 1 21 9:40 PM SPOKANE
261 13072946 6/30/14 5 5:49 AM 2014-06-30 1 5 5:49 AM BOSTON
356 13081398 6/30/14 10 10:52 AM 2014-06-30 1 7 7:52 AM SPOKANE
389 13082306 6/30/14 11 11:25 AM 2014-06-30 1 8 8:25 AM SPOKANE
438 13082121 6/30/14 8 8:58 AM 2014-06-30 1 8 8:58 AM BOSTON
469 13081040 6/30/14 9 9:17 AM 2014-06-30 1 9 9:17 AM ALBANY
482 13080104 6/30/14 12 12:25 PM 2014-06-30 1 9 9:25 AM SPOKANE
501 13082120 6/30/14 9 9:36 AM 2014-06-30 1 9 9:36 AM BOSTON
617 13080490 6/30/14 13 1:23 PM 2014-06-30 1 10 10:23 AM SPOKANE
假设数据在数据帧df1,df2中。目标是将市场名称调整为相同,但目前略有不同。
首先,列出市场,使用以下命令列出df1中的唯一名称,重复df2。
mk1 <- sort(unique(df1$market))
mk2 <- sort(unique(df2$market))
dmk12 <- setdiff(mk1,mk2)
dmk21 <- setdiff(mk2,mk1)
使用dmk12和dmk21识别不同的市场。确定要使用的名称以及它们如何匹配,让我们将df1的“乔治亚州亚特兰大”从df2更改为“亚特兰大”。然后使用
df2[df2$market=="Atlanta","market"] = "Atlanta, GA"
格式是
df_to_change[df_to_change[,"column"]=="old data", "column"] = "new data"
如果您只有90个名称要更正,我将写出90条类似上面的更改行。
调整所有名称后,再次执行sort(unique(df))并使用setdiff两次以确认所有名称相同。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句