如何在R中使用reshape函数将重复列的宽格式表格转为长格式?
用reshape函数转换重复列的宽表为长格式
首先,你的原始数据在R中会自动为重复列名添加后缀(比如Region.1、A.1),先构造对应的示例数据框:
df5 <- data.frame( Region = c("SS", "SS"), A = c(45, 22), B = c(98, NA), C = c(89, 77), Region.1 = c("KK", "KK"), A.1 = c(87, 45), B.1 = c(NA, 78), C.1 = c(25, 88), Region.2 = c("MM", "MM"), A.2 = c(88, NA), B.2 = c(NA, 72), C.2 = c(59, 35) )
接下来使用reshape函数完成转换,核心是通过varying参数指定重复列的分组对应关系:
# 转换为长格式 long_df <- reshape( df5, idvar = "id", # 用行号作为原始行的唯一标识 timevar = "group", # 新增分组变量标记不同的重复列组 varying = list( c("Region", "Region.1", "Region.2"), # 所有Region相关列 c("A", "A.1", "A.2"), # 所有A相关列 c("B", "B.1", "B.2"), # 所有B相关列 c("C", "C.1", "C.2") # 所有C相关列 ), v.names = c("Region", "A", "B", "C"), # 转换后的列名 direction = "long" # 指定转换方向为长格式 ) # 清理多余列并重置行名 long_df <- long_df[, c("Region", "A", "B", "C")] rownames(long_df) <- NULL
运行后得到的long_df就是你需要的格式:
> long_df Region A B C 1 SS 45 98 89 2 SS 22 NA 77 3 KK 87 NA 25 4 KK 45 78 88 5 MM 88 NA 59 6 MM NA 72 35
参数说明
idvar:确保原始每行的多组数据能被正确拆分,这里用行号作为唯一标识varying:按变量名分组列出所有重复列,告诉函数哪些列属于同一变量的不同组v.names:定义转换后保留的列名direction="long":明确要从宽格式转换为长格式
内容的提问来源于stack exchange,提问作者Subhojit Chakraborty
相关产品推荐
相关产品推荐

