full_join中的错误由于类型不兼容而无法加入:整数/字符-有时仍然有效?

时间:2018-07-26 18:13:04

标签: r dplyr tidyverse

我有2个数据帧列表(df1和df2)。列表和数据框在它们的类和第4列中是相同的,但是在它们包含的行数或数据数上是不相同的:

df1.1 =

Col1 Col2 Col3 Col4

chr  chr  num  num

df2.1 =

Col1 Col2 Col3 Col4

chr  chr  num  num 

etc,每个列表100个数据帧。

它们存储在我使用lapply函数的数据帧(df1)的主列表中。

我想将每个列表中的所有数据框减少到一个数据框。 为此,我使用了:

reducedf1<-df1 %>% reduce (full_join);
reducedf2<-df2 %>% reduce(full_join);

对于df1,它可以正常工作。对于df2,它没有。 给出的错误是:

Error in full_join_impl(x,y, by_x, by_y, aux_x, aux_y, na_matches) : Can't join on 'Col2' x 'Col2' because of incompatible types (integer/character). 

为解决此问题,我尝试检查列表中是否存在不具有相同类的数据框并进行更正:

testingfunction<-function(x){
col_to_change=x[,2];
class(col_to_change)<-"character";
x}

mutatedf2<-lapply(df2, testingfunction)

我检查了-每个数据帧中仍然具有类字符,但没有联接-同样的错误。

如果我的数据框都具有相同的类,并且它们以相同的方式创建并放入相同的列表中,为什么在一个数据框中它会起作用而在一个数据框中却不起作用? 解决此错误的方法是什么,这样我就可以使用reduce和full_join将列表中的数据框合并为一个大数据框?

1 个答案:

答案 0 :(得分:0)

我不知道为什么会在一个数据帧而不是另一个数据帧中发生,但是我解决了: Editdf2<-lapply(df2, transform, Col2 = as.character(Col2)); 然后毫无问题地运行reduce。

我假设Col2列表中的1个数据帧有一个问题,是整数而不是字符,但是没有办法事先知道。