【问题标题】:R: Change order of several dataframes in a list depending on mean of a specific columnR:根据特定列的平均值更改列表中多个数据框的顺序
【发布时间】:2018-02-12 14:07:44
【问题描述】:

有多个包含多个数据框的列表。所有数据框都有相同的两个列名,但长度不同。

一个简单的例子是:

d1 <- data.frame(y1 = c(1:5), y2 = 3)
d2 <- data.frame(y1 = c(6:13), y2 = 1)
d3 <- data.frame(y1 = c(13:21), y2 = 2)
df_list <- list(d3, d1, d2)

现在我正在寻找一种解决方案来计算列表中每个数据帧中 y1 列的平均值,然后从 y1 列的平均值最低的那个开始更改数据帧的顺序。

到目前为止,我能够通过以下方式计算均值:

lapply(df_list, function(x) mean(x[,1]))

但我不知道如何将它与order() 结合起来

df_list <- df_list[order(lapply(df_list, function(x) mean(x[,1])))]

给我

"顺序错误(lapply(df_list, function(x) mean(x[, 1]))) :
'orderVector1' 中未实现的类型 'list'"

感谢您的帮助!

【问题讨论】:

  • lapply(...)更改为sapply(...)

标签: r


【解决方案1】:

您可以使用下面的代码来执行此操作,但这不会更改您的列表顺序,因为三个数据框已经按照您指定的顺序排列:

df_list=df_list[order(sapply(df_list,function(x) mean(x$y1)))]

【讨论】:

  • 非常感谢!你是对的,这是一个糟糕的例子,但它工作得很好,即使我改变了例子的顺序。
猜你喜欢
  • 1970-01-01
  • 2020-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-03
  • 2020-08-07
  • 2021-11-24
  • 1970-01-01
相关资源
最近更新 更多