首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数对列表对象中的data.frames进行排序

函数对列表对象中的data.frames进行排序
EN

Stack Overflow用户
提问于 2020-03-23 16:15:38
回答 4查看 143关注 0票数 2

我正在试图找到一个优雅的函数来对list对象中的data.frames进行排序。我已经知道lapply(df,function(x) xwith(x,order(var))工作得很好,但这似乎太复杂了。我正在尝试使用"[“函数,如果手动输入行号,它可以正常工作。显然,我想使用order函数生成的行号。

代码语言:javascript
复制
df <- list(
    data.frame(name = c("John", "Paul", "George", "Ringo"),   height = c(60, 58, 65, 55)),
    data.frame(name = c("Frank", "Tony", "Arthur", "Edward"), height = c(55, 65, 60, 50))
)

lapply(df, "[", c("height", "name"))

lapply(df, "[", c(3:1), )

order <- lapply(df, with, order(name))

order

lapply(df, with, order(name), "[")

lapply(df, with, "[", order(name), )

lapply(df, "[", with, order(name), )

Map("[", order , , df)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-04-05 01:01:19

其他软件包将简化这一点。如果您想使用base,可以扩展您尝试使用Map()的内容。

代码语言:javascript
复制
order <- lapply(df, with, order(name))
Map("[", df, order, TRUE)
#pseudo translation: df[order, TRUE]
## where TRUE will repeat and select all columns of df

最简单的方法是把你认为太复杂的东西往前走。您可以使用预先编写的函数进行简化:

代码语言:javascript
复制
lapply(df, function(x) x[order(x[["name"]]), ])

#or
fx_reorder = function (x, col){
  x[order(x[[col]]), ]
}

lapply(df, fx_reorder, "name")

## or to accept multiple columns
fx_reorder2 = function(x, cols) {
  if (missing(cols)) cols = names(x)
  x[do.call("order", x[cols]), ]
}

lapply(df, fx_reorder2)
lapply(df, fx_reorder2, "name")
lapply(df, fx_reorder2, 1:2)
票数 3
EN

Stack Overflow用户

发布于 2020-04-02 13:20:10

如果您使用的是library(data.table)而不是data.frame,那么解决方案非常优雅。

我们可以使用data.table将您的对象转换为lapply(df, setDT)。注意,如果首先将对象创建为data.table,则不需要执行此步骤,这将是一个更典型的工作流。

然后,可以使用

代码语言:javascript
复制
lapply(df, setkey, 'name')

# [[1]]
#      name height
# 1: George     65
# 2:   John     60
# 3:   Paul     58
# 4:  Ringo     55
# 
# [[2]]
#      name height
# 1: Arthur     60
# 2: Edward     50
# 3:  Frank     55
# 4:   Tony     65
票数 4
EN

Stack Overflow用户

发布于 2020-03-23 17:11:04

我们可以将arrangemap结合使用

代码语言:javascript
复制
library(dplyr)
library(purrr)
map(df,  ~ .x %>% 
              arrange(name))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60817420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档