dplyr:在 R 中按字母顺序排列列
Posted
技术标签:
【中文标题】dplyr:在 R 中按字母顺序排列列【英文标题】:dply: order columns alphabetically in R 【发布时间】:2015-07-04 13:56:42 【问题描述】:如果我有一个大的 DF(成百上千)列,其中不同的 col_names 按字母顺序随机分布:
df.x <- data.frame(2:11, 1:10, rnorm(10))
colnames(df.x) <- c("ID", "string", "delta")
如何按 col_name 的字母顺序(垂直)对所有数据进行排序?
基本上,我有数百个 CSV(sep="|") 文本文件,我需要将它们的列读入单个 df,按字母顺序对这些列进行排序,然后使用其他一些 dplyf 函数来获得最终结果。除了如何按字母顺序排列列之外,我已经弄清楚了所有这些。我不想按字母对列(上下)进行排序,而是按 col_names 的实际垂直方向及其相应数据。类似于在 Excel 中剪切和粘贴整列数据。
例如,我回顾了这种方法,但这是按字母顺序对行进行“排序”,这不是我想要做的。
How to sort a dataframe by column(s)?
谢谢!
【问题讨论】:
只需做df.x[,order(colnames(df.x))]
太棒了!我想知道是否会涉及一个子集。这类似于 Excel 中的复制/剪切功能吗?
【参考方案1】:
试试这个
df %>% select(noquote(order(colnames(df))))
或者只是
df[,order(colnames(df))]
【讨论】:
或者干脆df.x %>% select(order(colnames(.)))
dplyr
的最新版本是否改变了它的工作方式?我知道在某些函数中处理带引号和不带引号的变量名称的方式发生了变化。【参考方案2】:
在 dplyr 中执行此操作的另一种方法是:
iris %>%
select(sort(current_vars()))
current_vars()
返回可排序的列名,select()
将采用列名向量。
【讨论】:
在此表单中,我收到错误消息Error: Variable context not set
。 current_vars()
可能会被弃用?用everything()
替换current_vars()
对我来说很好。
current_vars()
但不适用于 everything()
(dplyr
0.7.6)。我没有收到上述错误。同样值得注意的是iris %>% select(sort(current_vars()), -Species)
有效,但iris %>% select(-Species, sort(current_vars()))
无效。
2019 年 12 月更新。current_vars()
已被弃用,取而代之的是 tidyselect::peek_vars()
。上面的代码适用于这种替换。 select(sort(tidyselect::peek_vars()))
您也可以使用新的relocate()
动词。 iris %>% relocate(sort(current_vars))
【参考方案3】:
如果一个(或多个)特定列必须是第一个(或最后一个),但其余的都是有序的,您可以:
mtcars %>% tibble %>%
select("hp", sort(colnames(.)))
【讨论】:
【参考方案4】:为什么不只是:
sort(colnames(df.x))
[1] "delta" "ID" "string"
【讨论】:
以上是关于dplyr:在 R 中按字母顺序排列列的主要内容,如果未能解决你的问题,请参考以下文章