我有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将列表中的数据框合并为一个大数据框?
答案 0 :(得分:0)
我不知道为什么会在一个数据帧而不是另一个数据帧中发生,但是我解决了:
Editdf2<-lapply(df2, transform, Col2 = as.character(Col2));
然后毫无问题地运行reduce。
我假设Col2列表中的1个数据帧有一个问题,是整数而不是字符,但是没有办法事先知道。