r-删除并排序大数据帧中的列



我有这个数据帧(为了便于示例,每列都有相同的值(

df = data.frame(x1 = c(1,2,3,4,5),
x2 = c(1,2,3,4,5),
x3 = c(1,2,3,4,5),
x4 = c(1,2,3,4,5),
x5 = c(1,2,3,4,5),
x6 = c(1,2,3,4,5),
x7 = c(1,2,3,4,5),
x8 = c(1,2,3,4,5))

我想把x7和x8放在x2和x3的位置,同时保留x7和x8的名称,同时删除x2和x3(我正在处理的数据帧非常大,我不能使用df[,c(1,7,8,4,5,6)]的简单方法(,所以我正在寻找一个更容易应用的函数。感谢

这样行吗?

library(dplyr)
df %>% 
relocate(c(x7,x8), .after = c(x2, x3)) %>% 
select(-c(x2, x3))
#>   x1 x7 x8 x4 x5 x6
#> 1  1  1  1  1  1  1
#> 2  2  2  2  2  2  2
#> 3  3  3  3  3  3  3
#> 4  4  4  4  4  4  4
#> 5  5  5  5  5  5  5

您可以尝试这种灵活的基本R方法:

reorder_fun <- function(move_cols, splitpoint, datframe){
a <- 1:grep(splitpoint, names(datframe))
b <- c(a, grep(paste(move_cols, collapse = "|"), names(datframe)))
newdf <- cbind(datframe[, b],
datframe[, setdiff(names(datframe), names(datframe[b]))])
newdf
}
reorder_fun(move_cols = c("x7", "x8"), splitpoint = "x1", datframe = df)

输出:

#   x1 x7 x8 x2 x3 x4 x5 x6
# 1  1  1  1  1  1  1  1  1
# 2  2  2  2  2  2  2  2  2
# 3  3  3  3  3  3  3  3  3
# 4  4  4  4  4  4  4  4  4
# 5  5  5  5  5  5  5  5  5

这允许您将所需列移动到其他位置(即,在第3列为之后

reorder_fun(move_cols = c("x7", "x8"), splitpoint = "x3", datframe = df)

或者如果你想移动不同的列

reorder_fun(move_cols = c("x5", "x8"), splitpoint = "x1", datframe = df)

最新更新