如何将多列分散数据合并到单列?求Excel及R实现方案
数据整理方案(Excel + R语言)
Excel 简易实现方案
方法1:LOOKUP函数快速提取
在空白单元格输入公式(根据实际数据范围调整行列):=LOOKUP("Data", $A$1:$F$1, A2:F2)
下拉填充所有行,即可提取每行中"Data"对应的数值。
注:切换其他字段时,只需把公式里的"Data"替换成目标字段名(比如"Total supply")即可。
方法2:筛选复制法(适合小数据量)
- 选中全部数据区域,按
Ctrl+G打开定位对话框,选择「定位条件」→「常量」,确定后选中所有非NA内容; - 用筛选功能找出所有包含目标字段(如"Data")的单元格,选中其相邻的数值单元格,批量复制到目标单列;
- 重复上述步骤处理"Total supply""Ticker"等其他字段。
R语言实现方案
假设你的原始数据框名为df,以下代码可实现批量提取指定字段的对应值:
单字段提取(以"Data"为例)
library(dplyr) library(tidyr) # 将宽表转为长表,过滤空值 df_long <- df %>% pivot_longer(cols = everything(), names_to = "col", values_to = "val") %>% filter(!is.na(val)) # 提取"Data"对应的数值 data_col <- df_long %>% group_by(grp = (row_number() - 1) %/% 2) %>% # 按字段+数值分组 filter(col == "Data" | lead(col) == "Data") %>% slice(2) %>% pull(val) # 输出结果 data.frame(Data = data_col)
多字段批量提取(适配你的真实需求)
# 定义需要提取的目标字段 target_fields <- c("Total supply", "Ticker", "Accepted Currencies") # 编写批量提取函数 extract_field <- function(field) { df_long %>% group_by(grp = (row_number() - 1) %/% 2) %>% filter(col == field | lead(col) == field) %>% slice(2) %>% pull(val) } # 合并所有字段的结果 final_result <- data.frame( lapply(target_fields, extract_field) ) colnames(final_result) <- target_fields # 查看最终结果 print(final_result)
内容的提问来源于stack exchange,提问作者Soph2010
相关产品推荐
相关产品推荐

