R语言如何按ID匹配批量将nsD的counts值填入split对应列
R批量匹配ID填充数据框解决方案
基础R无依赖方案(效率最高,适配百万级数据)
- 无需提前初始化split数据框,直接用内置
unstack函数一键完成长表转目标宽表:
split <- unstack(nsD, counts ~ ID)
- 若你已提前初始化好固定结构的split数据框,仅需填充对应ID列,用分组向量化赋值即可:
# 按ID分组提取所有counts值 counts_by_id <- split(nsD$counts, nsD$ID) # 批量匹配列名完成赋值 split[names(counts_by_id)] <- counts_by_id
- 若需要严格匹配你提前存储的唯一ID列表
IDlist,避免多余列写入:
split[IDlist] <- lapply(IDlist, function(id) nsD$counts[nsD$ID == id])
tidyverse可读性方案
library(tidyr) library(dplyr) split <- nsD %>% # 按ID列转为宽表,同ID的counts暂存为列表格式 pivot_wider(names_from = ID, values_from = counts, values_fn = list) %>% # 展开列表为多行,得到最终目标结构 unnest(cols = all_of(IDlist))
注意:需保证每个ID对应的counts条目数完全一致,否则缺失位置会自动填充NA,与你给出的示例输出结构匹配。
内容的提问来源于stack exchange,提问作者Emily Robbs
相关产品推荐
相关产品推荐

