合并数据框和 cbind 列表

Merge dataframe and cbind list

我从数据集中提取了一个变量y的加法、最大值和平均值以及x的最大值。

我也得到了最大 y 值的 x 值。

我使用 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 功能,但没有给我满意的数据。

这是我使用的代码:

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

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))