gpt4 book ai didi

r - 根据不同dfs的列名为列提供固定顺序

转载 作者:行者123 更新时间:2023-12-03 23:58:48 25 4
gpt4 key购买 nike

我有多个数据框,它们都包含 一个或多个 列狗、猫、鸟或鱼。对于所有数据框,我希望列的顺序为鱼、猫、狗、鸟。

df <- data.frame(dogs = c(1:2), cats = c(33:34), birds = c(2:3), fish = c(7:8))
dogs cats birds fish
1 1 33 2 7
2 2 34 3 8

df2 <- data.frame(dogs = c(5:6), cats = c(103:104), birds = c(4:5))
dogs cats birds
1 5 103 4
2 6 104 5

我想得到

#order fish, cats, dogs, birds
df
fish cats dogs birds
1 7 33 1 2
2 8 34 2 3

df2
cats dogs birds
1 103 5 4
2 104 6 5

现在我正在手动更改所有数据帧的列顺序(df[,c(4,2,1,3)] 等),但似乎找不到方法否则解决这个问题。有什么建议么?提前致谢!

最佳答案

base R 中更简单的选项是 match 来获取索引,指定 nomatch = 0 以便如果有列不存在匹配,它不会像 NA 一样。在这里,我们创建了一个用于多个数据集的函数

f1 <- function(dat, names_ord) {
dat[match(names_ord, names(dat), nomatch = 0)]
}


nm1 <- c('fish', 'cats', 'dogs', 'birds')
f1(df2, nm1)
# cats dogs birds
#1 103 5 4
#2 104 6 5

f1(df, nm1)
# fish cats dogs birds
#1 7 33 1 2
#2 8 34 2 3

或者它可以一次应用到一个list数据集

lapply(list(df, df2), f1, names_ord = nm1)

关于r - 根据不同dfs的列名为列提供固定顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65743850/

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