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

如何在R语言中将两列测量值合并为一列并生成标识列?

宽表转长表实现方案

输入数据

patient_idtimemeasurement1cov1measurement2
10257670,12
15106762
20295800,18
236080231

期望输出

patient_idtimemeasurementsm_idcov1
10257167
100,12267
1510167
1562267
20295180
200,18280
2360180
23231280

实现方法

方法1:Python Pandas

使用melt函数快速实现宽表转长表,代码如下:

import pandas as pd

# 构造输入数据
df = pd.DataFrame({
    'patient_id': [1, 1, 2, 2],
    'time': [0, 5, 0, 3],
    'measurement1': [257, 10, 295, 60],
    'cov1': [67, 67, 80, 80],
    'measurement2': ['0,12', 62, '0,18', 231]
})

# 执行宽转长操作
melted_df = df.melt(
    id_vars=['patient_id', 'time', 'cov1'],
    value_vars=['measurement1', 'measurement2'],
    value_name='measurements'
)

# 生成m_id标识列
melted_df['m_id'] = melted_df['variable'].apply(lambda x: 1 if x == 'measurement1' else 2)

# 调整列顺序并清理临时列
result_df = melted_df[['patient_id', 'time', 'measurements', 'm_id', 'cov1']]

# 查看结果
print(result_df)

方法2:SQL

通过UNION ALL合并两个查询结果,分别提取两类测量值:

SELECT 
    patient_id,
    time,
    measurement1 AS measurements,
    1 AS m_id,
    cov1
FROM your_table
UNION ALL
SELECT 
    patient_id,
    time,
    measurement2 AS measurements,
    2 AS m_id,
    cov1
FROM your_table
ORDER BY patient_id, time, m_id;

注意:将your_table替换为实际数据表名。

内容的提问来源于stack exchange,提问作者Anna-Kristina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 08:27:35