【问题标题】:Merge dataframe and cbind list合并数据框和 cbind 列表
【发布时间】:2017-08-09 22:39:45
【问题描述】:

我从数据集中提取了变量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 列出元素。也许你需要data1 &lt;- 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))
  • 谢谢,我发表了我的评论作为解决方案

标签: r merge cbind


【解决方案1】:

cbind 不起作用的原因是对象是lists。有几种方法可以纠正这个问题

1)lapply 替换为sapply 以获得vector 输出

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

对于其他情况类似,然后cbind 就像在 OP 中一样。事实上,它也可以在单个lapply/sapply 上完成

2) 因为对象是lists,我们先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))

【讨论】:

    猜你喜欢
    • 2018-07-25
    • 1970-01-01
    • 2021-01-24
    • 2020-02-01
    • 2018-06-04
    • 2017-04-22
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    相关资源
    最近更新 更多