如何按名称放置一行直到r中数据框的开头

how to place a row by name up to the beginning of a data frame in r

我有这个数据框

a <- c(5, 7, 9, 11)
b <- c(-8, -10, -3, -1)
c <- c(-4, -1, -6, 3)
d <- c(-4, -1, -6, 3)
df <- t(data.frame(a,b,c, d))
    
   V1  V2   V3  V4
a   5   7   9   11
b   -8  -10 -3  -1
c   -4  -1  -6   3
d   -4  -1  -6   3

然后我希望其余的行保持相同的顺序,只是将我想要的行(按行名)设置在我的数据框的某个位置。

让d排在第二位 即:

   V1  V2   V3  V4
a   5   7   9   11
d   -4  -1  -6   3
b   -8  -10 -3  -1
c   -4  -1  -6   3



让c在第一个位置 即:

   V1  V2   V3  V4
c   -4  -1  -6   3
a   5   7   9   11
b   -8  -10 -3  -1
d   -4  -1  -6   3


我们可以创建一个函数

f1 <- function(dat, rownm, pos) {
    full_rnm <- row.names(dat)
    tmp <- full_rnm
    nm1 <- setdiff(full_rnm, rownm)
    rn <- seq_along(full_rnm)
    tmp[pos] <- rownm
    tmp[-pos] <- nm1
    dat[tmp, ]  
}

-测试

> f1(df, "d", 2)
  [,1] [,2] [,3] [,4]
a    5    7    9   11
d   -4   -1   -6    3
b   -8  -10   -3   -1
c   -4   -1   -6    3

> f1(df, "c", 1)
 [,1] [,2] [,3] [,4]
c   -4   -1   -6    3
a    5    7    9   11
b   -8  -10   -3   -1
d   -4   -1   -6    3