【问题标题】:ordering columns in dataframe based on incomplete vector基于不完整向量对数据框中的列进行排序
【发布时间】:2017-08-01 11:31:45
【问题描述】:

我有一个基于 col 名称的向量,看起来像

x <- c("C", "A", "T")

我的数据框看起来像定义了行名和列名。

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

谢谢

【问题讨论】:

  • 提示:你可以使用setdiff()c()colnames()来做到这一点
  • 顺便说一句,你的向量 x 应该使用字符串,所以它应该看起来像这样:x &lt;- c("C", "A", "T")

标签: r dataframe


【解决方案1】:

以下将重新排列您的数据,以将向量 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

【讨论】:

  • 您可能希望排除第一列以匹配 OP 所需的输出:df[c(names(df)[1], x, setdiff(names(df)[-1], x))]
  • 感谢 Leo 和 Steven。我试过这个命令,但得到以下错误error in mydata[, c(names(mydata)[1], x, setdiff(names(mydata)[-1] : undefined columns selected 这是因为 row1 是我的 colnames?
  • 错误是由于我的 x 向量中有一个拖尾空白。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 2014-06-02
  • 1970-01-01
  • 2011-12-17
  • 2014-05-25
相关资源
最近更新 更多