【问题标题】:joining tables with merge command in R在 R 中使用合并命令连接表
【发布时间】:2026-02-01 14:45:01
【问题描述】:

我想使用“SPENO”列加入两个表,但收到此错误:

Error in fix.by(by.x, x) : 'by' must specify a uniquely valid column

这是我正在使用的命令:

setwd("P:/Users/Richmond/PEP_tagData")

read.csv("pepdeployments.csv", header=TRUE)
read.csv("pepdeployments_endDate.csv", header=TRUE)

pep_deploy1 <- "pepdeployments.csv"
pep_deploy2 <- "pepdeployments_endDate.csv"

combined <- merge(x=pep_deploy1,y=pep_deploy2,by.x="SPENO",by.y="SPENO")

关于我做错了什么有什么建议吗?谢谢。

【问题讨论】:

  • 您应该添加一个标签来指示您使用的语言。这将允许正确的人回答问题。
  • 我使用的是 R 语言。感谢您的提示!
  • merge() 在您指定的列名在其适用的输入 data.frame 中不存在时抛出该特定错误消息。因此,列名 SPENO 可能不存在于您的两个 data.frame 之一或两者中。
  • 提交这条命令会得到什么:names(pep_deploy1); names(pep_deploy2)?
  • 列名 SPENO 在两个数据框中。

标签: r join merge


【解决方案1】:

您没有正确读取数据。您需要将read.csv(...) 分配给一个对象

setwd("P:/Users/Richmond/PEP_tagData")

pep_deploy1 <- read.csv("pepdeployments.csv", header=TRUE)
pep_deploy2 <- read.csv("pepdeployments_endDate.csv", header=TRUE)

combined <- merge(x=pep_deploy1,y=pep_deploy2,by.x="SPENO",by.y="SPENO")

你正在做的是:

读取 .csv 文件,但只是将其打印到控制台。它没有被分配给任何对象:

read.csv("pepdeployments.csv", header=TRUE)
read.csv("pepdeployments_endDate.csv", header=TRUE)

然后将字符串pepdeployments.csvpepdeployments_endDate.csv 分配给对象。所以你的对象只是那些字符串,而不是数据。

pep_deploy1 <- "pepdeployments.csv"
pep_deploy2 <- "pepdeployments_endDate.csv"

【讨论】:

  • 仔细查看后,新数据表似乎包含从 y=pep_deploy2 连接/合并的所有字段的 NA 值。
  • @biscuit - 这取决于您想要的连接类型。你想要一个内/左/右/外吗?看看?mergeall 参数。
  • 结果证明合并成功了,NA 列只是 csv 的产物。