我正在努力加入两个数据集
#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中)
答案 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。
希望这会有所帮助!