gpt4 book ai didi

r - 用户提供的参数用于使用排列对 data.frame 进行排序

转载 作者:行者123 更新时间:2023-12-04 16:44:26 24 4
gpt4 key购买 nike

假设我有这个 data.frame :

df = data.frame(strain=c("I","I","R","R"),sex=c("M","F","M","F"),age=c("8d","8d","64d","64d"))

和一个用户提供的 data.frame定义如何订购 df .例如:
order.df = data.frame(column = c("age","sex","strain"),order = c("+","-","+"))

我想用 arrangeplyr打包订购 df按照 order.df定义的顺序.如果不是用户提供的,我会这样做:
arrange(df, age, desc(sex), strain)

所以我的问题是如何使用 order.df 实现这一目标?或者什么数据结构适合存储用户提供的订单定义,以便它可以与安排一起工作。

最佳答案

这里有两种方法可能会让@hadley 杀死一些小猫......

# make sure that order.df contain character not factors
r <- lapply(order.df, as.character)
# create a list of names refering the columns
rl <- lapply(r[['column']],function(x)list(column = as.name(x)))
# create the appropriate list of arguments
rexp <- unname(Map (f=function(order,column){
cm <- force(column)
if (order =='-'){rn <-substitute(desc(column),cm)} else {
rn <- substitute(column,cm)}
rn
}, order=r[['order']],column = rl))



do.call(arrange, c(alist(df=df),rexp))
# strain sex age
#1 R M 64d
#2 R F 64d
#3 I M 8d
#4 I F 8d



#alternatively, use as.quoted...
fmts <- ifelse(r[['order']]=='-', 'desc(%s)','%s')
rexp2 <- lapply(unname(Map(fmt = fmts, f= sprintf,r[['column']])),
function(x) as.quoted(x)[[1]])

do.call(arrange, c(alist(df=df),rexp2))
# strain sex age
#1 R M 64d
#2 R F 64d
#3 I M 8d
#4 I F 8d

关于r - 用户提供的参数用于使用排列对 data.frame 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22520205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com