You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用dplyr按列后缀与首个非零值重排R dataframe列顺序

R DataFrame 按列名后缀+列首个非零值位置排序方案

直接使用以下可运行代码即可实现需求:

# 加载示例数据
df = data.frame('col1_A'=c(0,0,3),'col2_A'=c(0,2,12),'col1_B'=c(0,0,1),'col2_B'=c(0,4,1))

# 1. 提取每列的后缀(取列名最后一个下划线后的字符,适配任意后缀分组)
col_suffix <- sub(".*_([A-Za-z]+)$", "\\1", colnames(df))
# 2. 计算每列第一个非零值的出现行号
first_nonzero_pos <- apply(df, 2, function(col) which(col != 0)[1])
# 3. 生成排序规则:先按后缀升序(A自动排在B前)、再按首个非零行号升序(出现位置越靠前排越前)
col_order <- order(col_suffix, first_nonzero_pos)
# 4. 重新排列列顺序得到结果
sorted_df <- df[, col_order]

# 输出验证结果
print(sorted_df)

运行输出结果与预期完全一致:

col2_A col1_A col2_B col1_B
1      0      0      0      0
2      2      0      4      0
3     12      3      1      1

补充说明:

  • 若存在全为0的列,first_nonzero_pos会返回NA,默认会排在同后缀组的末尾,可根据需求自行替换NA值调整全零列的排序优先级
  • 代码自动适配任意后缀的分组排序,只要列名符合「xxx_后缀」的命名规则即可

内容的提问来源于stack exchange,提问作者Pedro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 15:27:02