R 如何使用一个数据帧中的值在另一个数据帧中重新编码值?

R 如何使用一个数据帧中的值在另一个数据帧中重新编码值?,r,variables,R,Variables,我有一个名为traffic的文件,看起来像这样: city statenum casenum vnumber pnumber county accdate accday accmin accmon acctime -1 6 23 1 1 47 1082010 8 50 1 150 0 6 25 1 1 73 1042010 4 0

我有一个名为
traffic
的文件,看起来像这样:

city statenum casenum vnumber pnumber county accdate accday accmin accmon acctime
-1       6      23       1       1     47 1082010      8     50      1     150
0        6      25       1       1     73 1042010      4      0      1    2200
0        6     652       1       4     71 3282010     28      1      3    1901
1        6    1289       1       2     71 7152010     15     40      7    2140
4        6    1289       1       3     71 7152010     15     40      7    2140
1        6    1289       1       4     71 7152010     15     40      7    2140
Code     Definition
-1       Blank
0        NA
1        ACAMPO
2        ACTON
3        ADELANTO
4        ADIN
city statenum casenum vnumber pnumber county accdate accday accmin accmon acctime
Blank     6      23       1       1     47 1082010      8     50      1     150
NA        6      25       1       1     73 1042010      4      0      1    2200
NA        6     652       1       4     71 3282010     28      1      3    1901
ACAMPO    6    1289       1       2     71 7152010     15     40      7    2140
ADIN      6    1289       1       3     71 7152010     15     40      7    2140
ACAMPO    6    1289       1       4     71 7152010     15     40      7    2140
还有一组单独的文件,告诉我每列中的数字代码指的是什么。例如,我有一个名为
city
的文件,看起来如下:

city statenum casenum vnumber pnumber county accdate accday accmin accmon acctime
-1       6      23       1       1     47 1082010      8     50      1     150
0        6      25       1       1     73 1042010      4      0      1    2200
0        6     652       1       4     71 3282010     28      1      3    1901
1        6    1289       1       2     71 7152010     15     40      7    2140
4        6    1289       1       3     71 7152010     15     40      7    2140
1        6    1289       1       4     71 7152010     15     40      7    2140
Code     Definition
-1       Blank
0        NA
1        ACAMPO
2        ACTON
3        ADELANTO
4        ADIN
city statenum casenum vnumber pnumber county accdate accday accmin accmon acctime
Blank     6      23       1       1     47 1082010      8     50      1     150
NA        6      25       1       1     73 1042010      4      0      1    2200
NA        6     652       1       4     71 3282010     28      1      3    1901
ACAMPO    6    1289       1       2     71 7152010     15     40      7    2140
ADIN      6    1289       1       3     71 7152010     15     40      7    2140
ACAMPO    6    1289       1       4     71 7152010     15     40      7    2140
如何使用
城市
文件中的代码替换
交通
中的编码值?输出如下所示:

city statenum casenum vnumber pnumber county accdate accday accmin accmon acctime
-1       6      23       1       1     47 1082010      8     50      1     150
0        6      25       1       1     73 1042010      4      0      1    2200
0        6     652       1       4     71 3282010     28      1      3    1901
1        6    1289       1       2     71 7152010     15     40      7    2140
4        6    1289       1       3     71 7152010     15     40      7    2140
1        6    1289       1       4     71 7152010     15     40      7    2140
Code     Definition
-1       Blank
0        NA
1        ACAMPO
2        ACTON
3        ADELANTO
4        ADIN
city statenum casenum vnumber pnumber county accdate accday accmin accmon acctime
Blank     6      23       1       1     47 1082010      8     50      1     150
NA        6      25       1       1     73 1042010      4      0      1    2200
NA        6     652       1       4     71 3282010     28      1      3    1901
ACAMPO    6    1289       1       2     71 7152010     15     40      7    2140
ADIN      6    1289       1       3     71 7152010     15     40      7    2140
ACAMPO    6    1289       1       4     71 7152010     15     40      7    2140
我见过的所有使用recode或类似方法的解决方案都涉及明确说明哪个值对应于哪个值,如
cars
packages示例:
recode(x,“c(1,2)='A';else='B')
我想做什么,如果
city$code
traffic$city
匹配,则使用
city$Definition
中的字符串替换
traffic$city
中的数字代码


我可以做
交通这也许是你想要的

traffic<-read.table(header=T,text="city statenum casenum vnumber pnumber county accdate accday accmin accmon acctime
-1       6      23       1       1     47 1082010      8     50      1     150
0        6      25       1       1     73 1042010      4      0      1    2200
0        6     652       1       4     71 3282010     28      1      3    1901
1        6    1289       1       2     71 7152010     15     40      7    2140
4        6    1289       1       3     71 7152010     15     40      7    2140
1        6    1289       1       4     71 7152010     15     40      7    2140")

city<-read.table(header=T,text="Code     Definition
-1       Blank
0        NA
1        ACAMPO
2        ACTON
3        ADELANTO
4        ADIN")

traffic$city<-city$Definition[match(traffic$city,city$Code)]
我主张使用sqldf和SQL类型选择作为回答您最后一部分的方法。但是,我无法评论它在处理大型数据帧时的性能

编辑:
我想让
选择c.定义为city….
但它会抛出一个错误这可能是您想要的

traffic<-read.table(header=T,text="city statenum casenum vnumber pnumber county accdate accday accmin accmon acctime
-1       6      23       1       1     47 1082010      8     50      1     150
0        6      25       1       1     73 1042010      4      0      1    2200
0        6     652       1       4     71 3282010     28      1      3    1901
1        6    1289       1       2     71 7152010     15     40      7    2140
4        6    1289       1       3     71 7152010     15     40      7    2140
1        6    1289       1       4     71 7152010     15     40      7    2140")

city<-read.table(header=T,text="Code     Definition
-1       Blank
0        NA
1        ACAMPO
2        ACTON
3        ADELANTO
4        ADIN")

traffic$city<-city$Definition[match(traffic$city,city$Code)]
我主张使用sqldf和SQL类型选择作为回答您最后一部分的方法。但是,我无法评论它在处理大型数据帧时的性能

编辑:
我想让
选择c.Definition as city…..
在这里,但它会引发一个错误

也许最简单的方法是重命名查找表中的列,以便合并操作能够“正常工作”:


names(city)也许最简单的方法是重命名查找表中的列,以便合并操作“正常工作”:


names(city)啊哈,我正在寻找使用match的解决方案。您也可以编写它
traffic$CityTanks,我还没有开始使用sqldf,但我知道很多人最终都会使用sqldf,特别是当他们的数据越来越大时,所以应该继续使用它;-)啊哈,我正在使用match寻找解决方案。您也可以编写它
traffic$CityTanks,我还没有开始使用sqldf,但我知道很多人最终都会使用sqldf,特别是当他们的数据越来越大时,所以应该继续使用它;-)提供的匹配解决方案显然是我会尝试的方法。你在最后一句中提出的解决问题的要求似乎过于含糊,无法付诸行动。为什么不发布另一个问题,提供一个更具体的起点呢?让我把最后一部分说得更清楚一点——我有更多的文件,而不仅仅是
city
。我希望能够从各自的文件中使用各自的值对city、county和accmon等重新编码,而不必为每个文件编写单独的匹配语句。不过,可能付出的努力比它的价值还多。这不是
合并的一个明显例子吗?详细信息(如前所述,需要确定。正如我在原始问题中提到的,merge并没有提供我想要的行为。匹配()下面的方法是我想要的,但我必须为我想重新编码的每一列重新编码,这是一项艰巨的工作。我只是希望,因为这肯定是一项常见的活动,因此有一个方便的功能。这基本上是告诉你同样的事情,但有一点更详细:提供的匹配解决方案显然是oach我会尝试的。你在最后一句中提出的解决方案看起来太模糊了。为什么不发布另一个问题,提供一个更具体的起点呢?让我更清楚地说明最后一部分-我有更多的文件,而不仅仅是
city
。我希望能够重新编码city、country和accmon等等从各自的文件中获取各自的值,而不必为每个值编写单独的匹配语句。不过,这可能需要付出更多的努力。对于
merge
?详细信息来说,这不是一个明显的例子吗(如前所述,需要确定。正如我在原始问题中提到的,merge没有提供我想要的行为。匹配()下面的方法符合我的要求,但我必须为我想重新编码的每一列重新编码,这很费劲。我只是希望,因为这肯定是一项常见的活动,因此有一个方便的功能。这基本上是告诉你同样的事情,但有一点更详细: