如何反转列表中 data.frame 对象的顺序,让它们具有相同的模式?
How to reverse the order of data.frame object in the list that let them have same pattern?
我有三个列表,其中包含 data.frame 个对象,但顺序肯定非常不同。我想让它们具有相同的顺序,例如 list1、list2 或 list 3。如何反转不同列表中具有相同 pattern/order 的 data.frame 对象的顺序?有没有人给我一些可能的想法来轻松地进行这种操作?非常感谢。
有了列表中的变量,我们可以使用 public 空气质量、虹膜、汽车、二氧化碳等数据在 R 中快速 运行;
数据
list1 <- list(pass=list(Alpha.df1_yes, Beta.df1_yes, Gamma.df1_yes, Theta.df1_yes),
fail=list(Alpha.df1_no, Beta.df1_no, Gamma.df1_no, Theta.df1_no))
list2 <- list(pass=list(Beta.df2_yes, Alpha.df2_yes, Gamma.df2_yes, Theta.df2_yes),
fail=list(Beta.df2_no, Alpha.df2_no, Gamma.df2_no, Theta.df2_no))
list3 <- list(pass=list(Gamma.df3_yes, Alpha.df3_yes, Beta.df3_yes, Theta.df3_yes),
fail=list(Gamma.df3_no, Alpha.df3_no, Beta.df3_no, Theta.df3_no))
list4 <- list(pass=list( Theta.df4_yes, Alpha.df4_yes, Beta.df4_yes,Gamma.df4_yes),
fail=list(Theta.df4_no, Alpha.df4_no, Beta.df4_no,Gamma.df4_no ))
期望的输出(让我们使用与 list1 相同的模式):
list1 <- list(pass=list(Alpha.df1_yes, Beta.df1_yes, Gamma.df1_yes, Theta.df1_yes),
fail=list(Alpha.df1_no, Beta.df1_no, Gamma.df1_no, Theta.df1_no))
list2_NeW <- list(pass=list(Alpha.df2_yes, Beta.df2_yes, Gamma.df2_yes, Theta.df2_yes),
fail=list(Alpha.df2_no, Beta.df2_no, Gamma.df2_no, Theta.df2_no))
list3_New <- list(pass=list(Alpha.df3_yes, Beta.df3_yes,Gamma.df3_yes, Theta.df3_yes),
fail=list(Alpha.df3_no, Beta.df3_no, Gamma.df3_no, Theta.df3_no))
list4_New <- list(pass=list(Alpha.df4_yes, Beta.df4_yes,Gamma.df4_yes, Theta.df4_yes),
fail=list(Alpha.df4_no, Beta.df4_no, Gamma.df4_no, Theta.df4_no))
因为数据在嵌套结构中,让它们在新构造的列表中具有相同的模式有点棘手。谁能提出可能的想法?
我假设嵌套是不变的,并创建了一些帮助函数以保持可读性:
exchangeDF <- function(List, newOrder){
return(List[newOrder])
}
newOrder <- c(2,1,3,4)
list2_NeW <- list(pass = exchangeDF(list2$pass, newOrder),
fail = exchangeDF(list2$fail, newOrder))
#....
为了使其更通用:
newOrder <- c(2,1,3,4)
exchangeNestedDF <- function(ListOfListsOfDF, newOrder){
NewList <- lapply(ListOfListsOfDF, function(x) x[newOrder])
names(NewList) <- names(ListOfListsOfDF)
return(NewList)
}
list2_NeW <- exchangeNestedDF(list2, newOrder)
如果你愿意,你可以将它应用到所有列表项(尤其是当你有更多列表项时):
NewOrders <- list(c(2,1,3,4), c(2,3,1,4), c(2,3,4,1))
LIST <- lapply(1:3, function(i) exchangeNestedDF(get(paste0("list", i)), NewOrders[[i]]))
请注意,此解决方案非常适用于 data.frames 的嵌套列表。
我有三个列表,其中包含 data.frame 个对象,但顺序肯定非常不同。我想让它们具有相同的顺序,例如 list1、list2 或 list 3。如何反转不同列表中具有相同 pattern/order 的 data.frame 对象的顺序?有没有人给我一些可能的想法来轻松地进行这种操作?非常感谢。
有了列表中的变量,我们可以使用 public 空气质量、虹膜、汽车、二氧化碳等数据在 R 中快速 运行;
数据
list1 <- list(pass=list(Alpha.df1_yes, Beta.df1_yes, Gamma.df1_yes, Theta.df1_yes),
fail=list(Alpha.df1_no, Beta.df1_no, Gamma.df1_no, Theta.df1_no))
list2 <- list(pass=list(Beta.df2_yes, Alpha.df2_yes, Gamma.df2_yes, Theta.df2_yes),
fail=list(Beta.df2_no, Alpha.df2_no, Gamma.df2_no, Theta.df2_no))
list3 <- list(pass=list(Gamma.df3_yes, Alpha.df3_yes, Beta.df3_yes, Theta.df3_yes),
fail=list(Gamma.df3_no, Alpha.df3_no, Beta.df3_no, Theta.df3_no))
list4 <- list(pass=list( Theta.df4_yes, Alpha.df4_yes, Beta.df4_yes,Gamma.df4_yes),
fail=list(Theta.df4_no, Alpha.df4_no, Beta.df4_no,Gamma.df4_no ))
期望的输出(让我们使用与 list1 相同的模式):
list1 <- list(pass=list(Alpha.df1_yes, Beta.df1_yes, Gamma.df1_yes, Theta.df1_yes),
fail=list(Alpha.df1_no, Beta.df1_no, Gamma.df1_no, Theta.df1_no))
list2_NeW <- list(pass=list(Alpha.df2_yes, Beta.df2_yes, Gamma.df2_yes, Theta.df2_yes),
fail=list(Alpha.df2_no, Beta.df2_no, Gamma.df2_no, Theta.df2_no))
list3_New <- list(pass=list(Alpha.df3_yes, Beta.df3_yes,Gamma.df3_yes, Theta.df3_yes),
fail=list(Alpha.df3_no, Beta.df3_no, Gamma.df3_no, Theta.df3_no))
list4_New <- list(pass=list(Alpha.df4_yes, Beta.df4_yes,Gamma.df4_yes, Theta.df4_yes),
fail=list(Alpha.df4_no, Beta.df4_no, Gamma.df4_no, Theta.df4_no))
因为数据在嵌套结构中,让它们在新构造的列表中具有相同的模式有点棘手。谁能提出可能的想法?
我假设嵌套是不变的,并创建了一些帮助函数以保持可读性:
exchangeDF <- function(List, newOrder){
return(List[newOrder])
}
newOrder <- c(2,1,3,4)
list2_NeW <- list(pass = exchangeDF(list2$pass, newOrder),
fail = exchangeDF(list2$fail, newOrder))
#....
为了使其更通用:
newOrder <- c(2,1,3,4)
exchangeNestedDF <- function(ListOfListsOfDF, newOrder){
NewList <- lapply(ListOfListsOfDF, function(x) x[newOrder])
names(NewList) <- names(ListOfListsOfDF)
return(NewList)
}
list2_NeW <- exchangeNestedDF(list2, newOrder)
如果你愿意,你可以将它应用到所有列表项(尤其是当你有更多列表项时):
NewOrders <- list(c(2,1,3,4), c(2,3,1,4), c(2,3,4,1))
LIST <- lapply(1:3, function(i) exchangeNestedDF(get(paste0("list", i)), NewOrders[[i]]))
请注意,此解决方案非常适用于 data.frames 的嵌套列表。