我有一个基于col名称的矢量,看起来像
x <- c("C", "A", "T")
我的数据框看起来像是定义了rownames和colnames。
names A B C D T
Dan 1 0 1 0 1
Joe 0 1 0 1 0
我想对数据帧进行排序,以便首先显示向量中的列,然后是不在向量
中的列names C A T B D
Dan 1 1 1 0 0
Joe 0 0 0 1 1
由于
答案 0 :(得分:3)
以下内容将重新排列您的数据,以便在开头设置向量x
中指定的列,然后在原始顺序中设置其余列。
x <- c("C", "A", "T")
mydata <- mydata[, c(x, setdiff(names(mydata), x))]
如果names
列应保留在第一个位置且未在x
中指定,请使用(感谢@StevenBeaupré指出并提供代码):
mydata <- mydata[, c(names(mydata)[1], x, setdiff(names(mydata)[-1], x))]
小数据示例:
mydata <- data.frame(names = c("Dan", "Joe"), A = c(1, 0), B = c(0,1),
C = c(1, 0), D = c(0,1), T = c(1, 0))
> mydata
names A B C D T
1 Dan 1 0 1 0 1
2 Joe 0 1 0 1 0
mydata <- mydata[, c(names(mydata)[1], x, setdiff(names(mydata)[-1], x))]
> mydata
names C A T B D
1 Dan 1 1 1 0 0
2 Joe 0 0 0 1 1