【问题标题】:How to order columns of the data frame according to the string variables taken from the column如何根据从列中取出的字符串变量对数据框的列进行排序
【发布时间】:2020-01-03 14:53:49
【问题描述】:

我想根据另一个数据框列中给出的文本变量对数据框的列进行排序(使用data.table 中的srtcolorder)。假设我有第一个数据框(df1),列命名和排序为“五”、“二”、“三”、“一”、“四”,并且有另一个数据框与列(df2$names ),包含排序为“一”、“二”、“三”、“四”、“五”的字符串变量。如何根据df2$names中的变量对df1的列进行排序?

我尝试使用setcolorder如下:

gf3<-setcolorder(df1, key=df2$names)

并得到一条错误消息

setcolorder(df1, key = df2$names) 中的错误: 未使用的参数(key = df2$names)

【问题讨论】:

  • 如果它是一个 data.table 做 df1[, mget(df2$names)]stackoverflow.com/questions/30562602/… 的可能重复项
  • 请通过添加当前和预期的输出使您的问题更具可重复性。使用dput(head(df,n)) 提供示例数据。
  • 参数名称是neworder 而不是key....
  • 亲爱的 Sindri Baldur, 感谢您的回复。我试过 df3
  • 尊敬的 NelsonGon,非常感谢您的回复。我不确定 dput(head(df,n)) 是否可以在这里工作,因为我的数据集包含 183 个变量的 2087 个观察值。

标签: r data.table


【解决方案1】:

由于没有提供数据,我创建了虚拟数据框来模拟您尝试重新排列的数据。

第一个数据框df1,按顺序包含字符列fivetwothreeonefour

df1 <- data.frame(
  five = character(),
  two = character(),
  three = character(),
  one = character(),
  four = character()
)

第二个数据框df2 包含一个标题为names 的列,df1 中的列名按其对应的数字排序。

df2 &lt;- data.frame(names = c('one', 'two', 'three', 'four', 'five'))

可以使用包含列索引或列名称的有序向量对数据框进行排序。在这种情况下,我们可以调用df1[, as.character(df2$names)]df1 的列进行排序。 as.character() 用于将df1 列名的因子向量转换为字符串向量。

如果您热衷于使用data.table::setcolorder(),您可以致电setcolorder(df1, as.character(df2$names))。此方法的一个好处是您不必将生成的数据框分配给变量df1。您的尝试没有成功,因为 (1) setcolorder() 函数没有 key 参数(只有 neworder)和 (2) 您的 df2$names 可能是一个因子向量(您可以通过调用 @ 检查987654343@).

【讨论】:

  • 亲爱的本杰明,感谢您的回复。实际上,df2$names 中的变量类已经设置为字符向量。但是,我使用了as.character(df2$names),但是R返回了错误信息“Names in neworder not found in x”,虽然x中有名字,和df2$names一样。跨度>
【解决方案2】:

感谢大家的回复。我明白我的错误。在 df2$names 中的字符串之前偶尔会有一些空格,这些空格在屏幕上看不到。因此,该列中的文本与 df1 中的列名不匹配。我记得我在“不可见”空间中遇到的类似问题,只是直观地尝试gsub(" ", "" df2$names) 删除它们。此后,df3&lt;-setcolorder(df1, neworder=key(as.character(df2[["names"]])) 完美运行。 再次感谢大家。

【讨论】:

  • 仅供参考,还有一个函数 trimws() 可以删除前导和尾随空格。
猜你喜欢
  • 2021-10-07
  • 1970-01-01
  • 1970-01-01
  • 2016-07-02
  • 2020-05-19
  • 2016-10-08
  • 1970-01-01
  • 2012-03-26
  • 2021-12-20
相关资源
最近更新 更多