【发布时间】:2020-07-04 03:27:30
【问题描述】:
我正在尝试找到一个优雅的函数来对列表对象中保存的 data.frames 进行排序。我已经知道 lapply(df, function(x) x[with(x, order(var)), ]) 工作正常,但这似乎太复杂了。我正在尝试使用“[”函数,如果我手动输入行号,它可以正常工作。但是很明显,我想使用 order 函数生成的行号。
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)
【问题讨论】:
-
是的,这是正确的。此外,通常如何在列表对象上使用 lapply 或 Map 函数时正确地为“[”函数提供参数。