合并数据框和 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))
我从数据集中提取了一个变量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))