r - 根据名称对列进行排序 R
问题描述
我需要根据列名对 R 中的以下 data.frame 进行排序:
L1 L10 L11 L12 L13 L14 L15 L16 L17 L18 L19 L2 L20 L21 L22 L23 L24 L25
1 1.00000000 0 0 0 0.000000e+00 0.0000000 0 0.00000000 0.000000e+00 0 0 0 0 0 0.00000000 0 0 0.000000000
有序列必须如下所示:
L1 L2 L10 L11 L12 L13 L14 L15 L16 L17 L18 L19 L20 L21 L22 L23 L24 L25
解决方案
你可以这样做sort(names(df))
,但问题是 L2 在 L10 之后(字符串的字典排序)。
我们可以做的一件事是在长度为 2 的字符串前面添加一个空格(左填充),以确保它们在排序时排在前面。
df[order(sprintf("%*s", 3, names(df)))]
L1 L2 L10 L11 L12 L13 L14 L15 L16 L17 L18 L19 L20 L21 L22 L23 L24 L25
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
另一种stringr
选择:
df[order(stringr::str_pad(names(df), 3, side = "left", pad = " "))]
PS。
如果您有更长的变量名,则 3 应替换为max(nchar(names(df))
.
推荐阅读
- printf - bash:如何总结读取命令中的间隔数?
- c# - 合并历史表记录asp.net mvc
- c# - FileSystemWatcher 监控 2 个目录。更改日志每次更改增加 1,所以当控制台中的一个文件更改时,它会弹出多次?
- firebase - 身份验证屏幕未按预期工作后显示主屏幕的条件
- ruby-on-rails - 访问散列中的值
- git - 带有额外支持分支的 Gitflow
- python - 使用 requests 和 BeautifulSoup 获取 Youtube 视频标题有时会出错,有时会起作用(Python)
- vespa - 我们可以在 vespa.ai 中做出多少个最大搜索定义?
- asp.net-core - 如何从 url 中删除或隐藏端口号?
- python - PyQt widget refresh behavior different when clicking button with mouse or keyboard