合并两个DataFrame遇问题:代码报错及行数差异合并结果咨询
解决DataFrame合并的代码问题与结果说明
嘿,我看到你在合并两个DataFrame时碰了壁,咱们一步一步来搞定:
首先修正你的合并代码
你写的by.companies和by.rounds2并不是R中merge()函数的合法参数,这就是代码无法运行的核心原因!合并列名不同的两个表时,应该用by.x指定第一个表(也就是companies)的键列,用by.y指定第二个表(rounds2)的键列。正确的代码应该是这样:
merg <- merge(companies, rounds2, by.x = "permalink", by.y = "company_permalink", all = TRUE)
关于合并后的结果样式
你用了all = TRUE,这对应全外连接(Full Outer Join),合并后的结果会包含两个表中所有的唯一键值,具体表现如下:
- 行数:最终行数等于两个表中所有唯一
permalink/company_permalink的总数,再加上重复键带来的笛卡尔积行数。举个例子:如果companies里某个permalink出现2次,rounds2里同一个键出现3次,合并后这个键会生成2*3=6行记录。 - 列数:两个表的列会合并到一起,但因为键列会被合并成一列(默认用
by.x指定的列名permalink),所以最终列数是8+6-1=13列。 - 空值情况:对于只在
companies里存在的键,rounds2对应的列会填充NA;反之,只在rounds2里存在的键,companies对应的列会填充NA;两边都有的键,会把对应行的内容拼接在一起。
举个极简示例帮你理解:
companies表的一行:permalink="A", col1="a1", col2="a2"
rounds2表的两行:company_permalink="A", col3="b1"; company_permalink="A", col3="b2"
合并后会得到两行:
- permalink="A", col1="a1", col2="a2", col3="b1"
- permalink="A", col1="a1", col2="a2", col3="b2"
如果某个键只在companies里有,比如permalink="B",那合并后对应的行里rounds2的所有列都是NA;同理只在rounds2里的键,companies的列都是NA。
内容的提问来源于stack exchange,提问作者Shree




