R语言实现两表合并:将次表值置于主表对应单元格括号内
合并两个结构一致表格的实现方法
下面提供几种不同场景下的实现方案,满足你将第二个表格对应值放入第一个表格对应值括号中、NA值保持不变的需求:
方案一:Python pandas 脚本实现
适合有编程基础的场景,处理效率高,适合批量或复杂表格:
import pandas as pd # 读取或定义两个表格数据(如果是文件可改用pd.read_csv/pd.read_table) df1 = pd.DataFrame( {'Dante': [1477, 1427, None, 1614], 'Inferno': [445, 751, 273, None], 'Purgatorio': [None, 359, 3095, 43], 'Paradiso': [191, 360, None, 116]}, index=['A', 'B', 'C', 'D'] ) df2 = pd.DataFrame( {'Dante': [658, 653, None, 703], 'Inferno': [445, 751, 273, None], 'Purgatorio': [None, 97, 2095, 43], 'Paradiso': [116, 360, None, 103]}, index=['A', 'B', 'C', 'D'] ) # 定义单元格合并逻辑 def merge_cell(v1, v2): if pd.isna(v1) or pd.isna(v2): return 'NA' if pd.isna(v1) else str(int(v1)) return f"{int(v1)}({int(v2)})" # 应用逻辑到整个表格 merged_df = df1.combine(df2, merge_cell) # 输出结果(na_rep指定空值显示为NA) print(merged_df.to_string(na_rep='NA'))
运行后会直接输出你需要的合并格式表格。
方案二:Excel 公式实现
适合日常办公场景,无需编程:
假设第一个表格在Sheet1的A1:E5区域,第二个表格在Sheet2的A1:E5区域:
- 新建
Sheet3作为结果表,复制表头到Sheet3的A1:E1 - 在
Sheet3的B2单元格输入以下公式:
=IF(OR(Sheet1!B2="NA",Sheet2!B2="NA"), IF(Sheet1!B2="NA","NA",Sheet1!B2), CONCAT(Sheet1!B2,"(",Sheet2!B2,")"))
- 选中
B2单元格,拖动填充柄覆盖所有数据单元格,最后调整列宽对齐即可。
方案三:Shell awk 纯文本处理
适合处理纯文本格式的表格文件(如.txt):
- 新建脚本文件
merge_tables.awk,写入以下内容:
BEGIN {OFS="\t"} NR==FNR { for(i=1;i<=NF;i++) { table1[NR,i] = $i } next } { printf "%s", $1 for(i=2;i<=NF;i++) { if(table1[FNR,i] == "NA" || $i == "NA") { output = (table1[FNR,i] == "NA") ? "NA" : table1[FNR,i] } else { output = table1[FNR,i]"("$i")" } printf "%s%s", OFS, output } print "" }
- 假设两个表格文件名为
table1.txt和table2.txt,在终端运行命令:
awk -f merge_tables.awk table1.txt table2.txt
即可得到合并后的纯文本表格。
内容的提问来源于stack exchange,提问作者Ahir Bhairav Orai
相关产品推荐
相关产品推荐

