dplyr包的文档中指出,要使用“by”,需要“要通过其进行连接的变量的字符向量”。
然而,情况似乎并非如此。
它似乎可以与数字或dbl变量(即列)一起工作,我指的是用于连接 Dataframe 的公共列(标识符)。
这是两个 Dataframe 的一部分。nomem_encr是公共标识符。
df1
Rows: 2,525
Columns: 11
$ nomem_encr <dbl> 800054, 800170, 800186, 800204, 800228, 800274,
$ mj16a093 <dbl+lbl> 4, 4, 3, 4, 2, 5, 5, 3, 5, 3, 6,
$ mj16a094 <dbl+lbl> 3, 4, 2, 4, 2, 5, 5, 2, 3, 2, 6,
df2
Rows: 6,092
Columns: 3
$ nomem_encr <dbl> 800009, 800015, 800042, 800054, 800057, 800085,
$ cv16h101 <dbl+lbl> 2, 3, 5, 6, 7, 6, 0, 6, 5,
$ cv16h044 <dbl+lbl> 6, 7, 7, 8, 0, 7, 5, 4, 7, 8, 7,
df3 <- left_join(df1, df2, by = "nomem_encr")
最好是转换为字符,还是无所谓?我的假设是,值只需要是唯一标识符。
2条答案
按热度按时间abithluo1#
“by”:“要通过连接的变量的字符向量”"
这意味着当您编写连接时,您的
by
参数需要是一个字符向量,而NOT您的列需要是一个字符。您将字符向量传递给
by
参数。列是否为数值并不重要lsmd5eda2#
使用左连接
措辞可能会更好,但帮助页面的意思是你必须为变量名提供一个字符向量,但变量类型可以是任何类型。基本上你是在告诉
by
参数“join by this variable explicitly”。来自Hadley威克姆的R for Data Science的一个可视化可能有助于说明这是如何用left_join
完成的,其中“key”是连接所需的by
列:一个简单的例子是
nycflights13
数据集,首先加载tidyverse和nycflights13包。然后可以检查
flights
数据集和planes
数据集共享哪些列。我们发现它们都包含“tailnum”:
我们可以通过
left_join
和tailnum变量将两个数据集与by
结合起来,如下所示:这样我们就得到了综合数据:
其他联接的概化性
顺便说一下,这是由
dplyr
中的所有其他连接完成的,但是它如何完成取决于您使用的连接。(使用的第一个 Dataframe ,在这种情况下为flights
),而right_join
通过y连接(第二个 Dataframeplanes
)。下面是另外三个例子,我已经根据它们的用法标记了它们:尝试一下它们,看看哪一个最适合您的用例。