如何按名称放置一行直到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
我有这个数据框
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