R语言中两种等价内连接方式为何一种报错?
你对
inner_join的by参数理解错了核心点 咱们直接戳破误区:你把by参数当成了要传入连接列的具体数值,但实际上它的作用是指定用来做匹配的列名——这才是文档里“用于连接的变量名组成的字符向量”的真实意思。
先看正确的用法(方法1)
inner_join(tb1,tb2,by="key") 这句话的逻辑是:“在tb1和tb2里,找到名为key的列,用这两列的内容做匹配,把符合条件的行合并起来”。这里的"key"是列的名字,完全符合文档里“变量名(列名)组成的字符向量”的定义,所以能正常运行。
再看你出错的方法2
你传入的c("a","c","b","c","a")是tb1$key这一列的具体值,但inner_join会把这些字符串当成列名去查找——它会尝试在tb1和tb2里找名为"a"、"c"、"b"的列,同时还发现你重复传入了"c"和"a",这就违反了“连接用的列名必须唯一”的规则,所以直接抛出了Error: Join columns must be unique的错误。
额外补充:如果两个表的连接列名不一样怎么办?
比如tb1的连接列叫tb_key,tb2的叫ref_key,这时候by参数可以用命名向量来对应,写法是:
inner_join(tb1, tb2, by = c("tb_key" = "ref_key"))
这里的向量元素依然是列名,只是用命名的方式明确了左右表的对应关系。
内容的提问来源于stack exchange,提问作者Tan Kin Meng
相关产品推荐
相关产品推荐

