连接具有不同类的两个数据集

时间:2016-10-17 23:43:40

标签: r

我正在努力加入两个数据集

 #df1

  id   name1
   1    a
   2    b
   3    c

   $df2

  id     name2
  1       c
  2       d

我尝试通过id

加入他们
  library(dplyr)


 result <- left_join(df1, df2, by="id")

它给了我以下错误

  

错误:无法加入列&#39; id&#39; x&#39; id&#39;:   无法加入&#39; id&#39; x&#39; id&#39;因为   不兼容的类型(因子/整数)

因为他们有不同的类:

 sapply(df1, class)
        id       name1
     "factor"       "factor"    


sapply(df2, class)
        id       name2
     "integer"       "factor"

我尝试更改类以使它们类似

 df1$id <- as.integer (df1$id)

但是,找到两个数据集中的公共行并没有帮助。  (它无法识别类似的&#34; id&#34; s在df2中)

2 个答案:

答案 0 :(得分:1)

在帮助页面中:建议使用as.numeric(levels(f))[f]代替as.numeric(as.character(f))

factor =&gt;的问题@Joshua Ulrich全面回答了数字/整数转换 here

寻求并且你会发现,但是用户需要知道要找到什么才能得到答案。

?factor

文档中的警告消息
  

因子的解释取决于代码和   &#34;水平&#34;属性。小心只比较相同的因素   一组等级(按相同顺序)。特别是,as.numeric应用   一个因素是没有意义的,可能是通过隐性强制发生的。至   将因子f转换为大约其原始数值,   建议使用as.numeric(levels(f))[f],效率稍高   比as.numeric(as.character(f))。

通过确保stringsAsFactors=FALSE同时读取输入数据以将字符变量转换为因子,可以避免这一步骤,除非它们是绝对必要的,即分析中需要levels因素时。

答案 1 :(得分:0)

我遇到了同样的问题,只是从字符到数字并连接表。我尝试使用数字,即使使用上述方法也无法使用。

我不得不去as.integers(levels(df1$id))[df1$id]使其工作。

我尝试使用as.numeric(levels(df1$id))[df1$id],它将把我所有的值带给NA。

希望这会有所帮助!