2017-08-09 60 views
0

從數據集中提取變量y的最大值和平均值,最大值爲x合併數據幀和cbind列表

我還得到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功能,但didn't給我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

您正在嘗試'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))' – akrun

+0

它工作完美。非常感謝! – Calfiao

+0

謝謝,我發表了我的評論作爲解決方案 – akrun

回答

0

原因cbind沒有工作是因爲對象是list s。有幾種方法可以解決此

1)sapply更換lapply獲得vector輸出

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

和類似的其他案例,然後cbind作爲OP的。逸岸,它可以在一個單一的lapply/sapply

2)去做的,對象是list S,我們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))