Объединить фрейм данных и список 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, но не дал мне удовлетворительных данных.

Вот код, который я использую:

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


person Calfiao    schedule 09.08.2017    source источник
comment
Вы пытаетесь 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))   -  person akrun    schedule 10.08.2017
comment
Спасибо, я разместил свой комментарий как решение   -  person akrun    schedule 10.08.2017


Ответы (1)


Причина, по которой cbind не сработала, заключается в том, что объекты были list. Есть несколько способов исправить это

1) Замените lapply на sapply, чтобы получить результат vector.

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

и аналогично для других случаев, а затем cbind как в ОП. На самом деле, это можно сделать и на одном 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))
person akrun    schedule 09.08.2017