【问题标题】:0 rows when merging data.frame in R在 R 中合并 data.frame 时为 0 行
【发布时间】:2020-02-11 23:19:34
【问题描述】:

基本上每次我尝试合并两个数据框时,我都会返回一个包含 0 行的合并 data.frame。

这两个数据框有不同的行数(一个 122 另一个 112),不同的列数并且与这些相似(数据都是发明的 ndr): df1

S_ID    BMI     WEIGHT  HEIGHT
AA1    18.0   50.0    178
BB2    20.0   60.0    173
CC3    16.0   47.0    170
DD4    23.0   75.0    170

df2

S_ID  sex  age   
AA1    F   20     
BB2    M   27   
CC3    M   26   
DD4    F   18 

如你所想,我想通过S_ID 合并它们。我对保留两个数据框中都不存在的行不感兴趣。 我试过了:

  • merge(df1, df2)
  • merge(df1, df2, by = S_ID)
  • merge(df1, df2, by = S_ID, all=FALSE) 乃至: merge(df1,df2, by = S_ID, all=TRUE) 我使用 RStudio,并直接从“导入数据”加载数据集。数据集最初都是.csv。 当我问typeof() 这两个数据集时,它说它们是列表。

更新: 大家好,确实有一个条目问题。 在 df2 中,“S_ID”列中的所有名称之后都有我不知道的空格。 非常感谢您的帮助。

【问题讨论】:

  • 可能是 S_ID 列之一中的尾随或前导空格?
  • merge(df1, df2, by = "S_ID") 应该可以工作 - 请注意您需要引用列名 - 不这样做会导致错误,除非您的环境中有一个名为 S_ID 的对象。
  • 您好,感谢您的回复;尾随是什么意思?
  • 您应该添加一个数据框样本。使用 dput(head(df1))dput(head(df2)) 并将输出粘贴到您的问题中。
  • 您可以隐藏任何敏感信息,但如果您需要进一步的帮助,您需要提供重现问题的示例。否则纯属猜测。我会注意@42- 的建议,并确保已从两个 id 变量中删除空格。

标签: r dataframe merge


【解决方案1】:

听起来有一个模糊的数据输入问题。 merge(df1, df2) 行应该能够提供结果....除非其中一个列存在问题,无法匹配“S_ID”列,或者列的命名存在细微差别。因此,要对此进行调查,您首先应尝试:

 "S_ID" %in% names(df1)
 "S_ID" %in% names(df2)

如果两者中的名称相同,则检查 S_ID 列中的值的交集(使用as.character 以避免因子编码的任何困难)

intersect(as.character(df1$S_ID), as.character(df2$S_ID))

merge 函数应该能够识别相同的列名,然后根据这些行的字符值匹配行。

【讨论】:

  • 我有同样的问题,但还没有解决。我已经检查了名称的等价性,它对我来说是 TRUE。接下来我检查了它返回字符(0)的交集。你能解释一下merge()是什么意思吗
  • 没有代码的语句“检查名称的等价性,它说 TRUE”对我来说几乎没有任何意义。 character(0) 是一个空向量。这意味着没有完全匹配。您应该考虑查看ncharstr,以便更好地描述您认为应该匹配的部分。您在控制台上看到的print 输出通常是模棱两可的。
【解决方案2】:

听起来您有数据类型问题。如果class(df1) 返回“list”,则合并和连接函数将不知道如何处理变量。尝试强制您的数据类型如下:

as.data.frame(df1)
as.data.frame(df2)
merge(df1,df2, by = "S_ID")

【讨论】:

  • class(df1) 返回“数据帧”
  • @Tim :如果 df1 是数据框,typeof(df1) 应该返回“list”。不需要强制。
【解决方案3】:

请问您使用什么代码将数据读入 RStudio?听起来您可能加载不正确。 试试:

df1 <- read.csv("YourFilepath")
df2 <- read.csv("YourFilepath2")

MergedData <- merge(df1,df2, by="S_ID")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-24
    • 2013-12-04
    • 2017-03-14
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多