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

基于键将DataFrame单元格对齐到对应列的实现方案

解决方案

可以用tidyverse工具链实现批量重排,适合处理数千条记录的大数据场景:

代码实现

library(tidyverse)

# 原始数据
df <- data.frame(q1= c("1:4", "1:4", "1:6", "1:7"),
                 q2= c("2:2", "2:4", "3:1", "2:1"),
                 q3= c("3:1", "4:1", "4:2", "3:2"),
                 q4= c("4:3", NA, NA, "4:2"))

# 批量重排逻辑
result_df <- df %>%
  rownames_to_column("row_id") %>%
  pivot_longer(-row_id, names_to = "original_col", values_to = "kv_pair") %>%
  filter(!is.na(kv_pair)) %>%
  mutate(
    key = str_extract(kv_pair, "^\\d+"),
    target_col = paste0("q", key)
  ) %>%
  pivot_wider(id_cols = row_id, names_from = target_col, values_from = kv_pair) %>%
  arrange(as.integer(row_id)) %>%
  select(-row_id) %>%
  select(q1, q2, q3, q4)

# 查看结果
print(result_df)

输出结果

q1   q2   q3   q4
1 1:4 2:2 3:1 4:3
2 1:4 2:4 <NA> 4:1
3 1:6 <NA> 3:1 4:2
4 1:7 2:1 3:2 4:2

逻辑说明

  1. 保留行号:用rownames_to_column标记原始行位置,确保重排后行顺序不变。
  2. 转长格式:pivot_longer把所有单元格转为"行号-原始列-键值对"的长表,方便统一处理。
  3. 提取键值:用str_extract拆分键值对,提取冒号前的数字作为匹配目标列的依据。
  4. 匹配目标列:根据键生成目标列名(如键3对应q3),再用pivot_wider转回宽格式,自动将对应键的单元格归位。
  5. 恢复格式:调整行顺序和列顺序,还原成原始数据的结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 04:40:58