合并dataframe和cbind列表

时间:2017-08-09 22:39:46

标签: r merge cbind

我从数据集中提取变量y的加,最大和平均值以及x的最大值。

我还得到x值为y的最大值。

我使用cbind函数汇总了这些值。我希望merge这个列表包含数据框,但得到了

error:Error in sort.list(bx[m$xi]) : 'x' must be atomic for 'sort.list'
Have you called 'sort' on a list?

另外,我尝试了unlist功能,但没有给我一个satistafctory数据。

以下是我正在使用的代码:

AUC<-lapply(split(data_example, data_example$class), function(d) sum(d$y))
max.y<-lapply(split(data_example, data_example$class), function(d) max(d$y))
max.x<-lapply(split(data_example, data_example$class), function(d) max(d$x))
auc.mean<-lapply(split(data_example, data_example$class), function(d) mean(d$y))
x.ymax<-lapply(split(data_example, data_example$class), function(d) 
d$x[which.max(d$y)])

data1<-cbind(AUC,max.y,max.x, auc.mean, x.ymax)

datafinal<-merge(data1, data_merge, by="class")

我在这里上传了数据以重现示例:

http://www.filedropper.com/dataexample_1 http://www.filedropper.com/datamerge

1 个答案:

答案 0 :(得分:0)

cbind无效的原因是因为对象是list。有几种方法可以纠正这个

1)lapply替换为sapply以获得vector输出

AUC <- sapply(split(data_example$y, data_example$class), sum)

并且类似于其他情况,然后是cbind,就像在OP中一样。事实上,它也可以在一个lapply/sapply上完成

2)由于对象为list,我们unlist,然后cbind

data1 <- data.frame(AUC = unlist(AUC),max.y = unlist(max.y), 
   max.x = unlist(max.x), auc.mean = unlist(auc.mean), 
   x.ymax = unlist(x.ymax), class = names(AUC))