我从数据集中提取变量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
答案 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))