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

如何按名称模式合并不同长度向量,避免循环填充留空值?

按名称模式合并不同长度向量(缺失列留空)

核心需求

将名称符合特定模式的多个不同长度向量按行合并,较短向量的缺失列填充NA而非循环重复元素。

解决方案(使用dplyr)

library(dplyr)

# 获取所有名称匹配"million_cities_"模式的向量
city_vectors <- mget(ls(pattern = "million_cities_"))

# 计算所有向量中的最长长度
max_col_count <- max(sapply(city_vectors, length))

# 将每个向量转换为单行数据框,补全NA
single_row_dfs <- lapply(city_vectors, function(vec) {
  padded_vec <- c(vec, rep(NA, max_col_count - length(vec)))
  as.data.frame(t(padded_vec), stringsAsFactors = FALSE)
})

# 合并所有单行数据框,保留原向量名称作为分组列
final_result <- bind_rows(single_row_dfs, .id = "country")

print(final_result)

输出示例

country          V1          V2      V3         V4       V5           V6          V7         V8     V9
1 million_cities_USA    New York Los Angeles Chicago    Houston  Phoenix Philadelphia San Antonio  San Diego Dallas
2  million_cities_UK       London  Birmingham    <NA>       <NA>     <NA>        <NA>         <NA>        <NA>  <NA>
3 million_cities_Canada  Toronto    Montreal Calgary     Ottawa Edmonton        <NA>         <NA>        <NA>  <NA>

基础R替代方案

如果不依赖dplyr,用基础R代码也能实现:

# 获取目标向量列表
city_vectors <- mget(ls(pattern = "million_cities_"))
max_col_count <- max(sapply(city_vectors, length))

# 补全向量并合并为矩阵
city_matrix <- do.call(rbind, lapply(city_vectors, function(vec) {
  c(vec, rep(NA, max_col_count - length(vec)))
}))

# 转换为数据框并添加分组列
final_result <- as.data.frame(city_matrix, stringsAsFactors = FALSE)
final_result$country <- rownames(final_result)
rownames(final_result) <- NULL

print(final_result)

关键说明

  • mget(ls(pattern = "xxx")):快速批量获取名称匹配特定模式的对象
  • 补全NA的逻辑:通过计算最长向量长度,给短向量补充对应数量的NA,确保所有向量长度一致
  • 转置操作t():将向量转换为单行结构,避免直接转数据框时变成列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 02:24:32