基于不完整向量对数据帧中的列进行排序

时间:2017-08-01 11:31:45

标签: r dataframe

我有一个基于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

由于

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