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没有提供我想要的行为。匹配()下面的方法符合我的要求,但我必须为我想重新编码的每一列重新编码,这很费劲。我只是希望,因为这肯定是一项常见的活动,因此有一个方便的功能。这基本上是告诉你同样的事情,但有一点更详细: