如何将宽格式数据集转长格式并保留原变量名?求可用函数
数据格式转换方案
你的源数据格式:
| variable1 | variable2 | variable3 |
|---|---|---|
| value1 | NA | NA |
| NA | value2 | NA |
| NA | NA | value3 |
目标是转成两列的长格式,以下是常用数据分析工具的实现方法:
R语言实现
方法1:使用tidyverse的pivot_longer
library(tidyverse) # 构造示例数据(替换成你的数据集) df <- tibble( variable1 = c("value1", NA, NA), variable2 = c(NA, "value2", NA), variable3 = c(NA, NA, "value3") ) # 执行转换 df_long <- df %>% pivot_longer( cols = everything(), # 选择所有列 names_to = "variable", # 原列名存入新列"variable" values_to = "value", # 原列值存入新列"value" values_drop_na = TRUE # 剔除含NA值的行 )
方法2:使用reshape2的melt
library(reshape2) df_long <- melt(df, na.rm = TRUE, variable.name = "variable", value.name = "value")
Python语言实现
方法1:使用pandas的melt
import pandas as pd import numpy as np # 构造示例数据(替换成你的数据集) df = pd.DataFrame({ 'variable1': ['value1', np.nan, np.nan], 'variable2': [np.nan, 'value2', np.nan], 'variable3': [np.nan, np.nan, 'value3'] }) # 执行转换 df_long = df.melt(var_name='variable', value_name='value').dropna()
方法2:使用pandas的stack(更简洁)
df_long = df.stack().reset_index(name='value').rename(columns={'level_1': 'variable'})
以上方法都能直接得到你想要的目标格式:
| variable | value |
|---|---|
| variable1 | value1 |
| variable2 | value2 |
| variable3 | value3 |
内容的提问来源于stack exchange,提问作者ab0rt
相关产品推荐
相关产品推荐

