如何用tidyverse熔解DataFrame并从列名拆分生成level新列
宠物调查数据熔解与层级提取方案
步骤1:正确执行数据熔解
先修正reshape2::melt的参数,匹配你需要的变量名与值名称:
library(reshape2) # 将原始数据熔解,指定标识变量、变量名和值名称 melted_data <- melt(raw_data, id.vars = "Animal", variable.name = "household", value.name = "abundance")
步骤2:从家庭列名提取层级信息
假设你的家庭列名格式为「层级标识+编号」(如a1、a2、b1这类),直接提取列名首字符作为层级:
# 提取household列名的第一个字符作为level melted_data$level <- substr(as.character(melted_data$household), 1, 1)
如果家庭列名格式更灵活(如household_a1、b_household2),可以用stringr包精准匹配提取a/b:
library(stringr) # 从household列名中匹配提取a或b melted_data$level <- str_extract(as.character(melted_data$household), "[ab]")
最终结果说明
处理后的melted_data会包含四列:Animal(宠物类型)、household(家庭标识)、abundance(宠物数量)、level(层级a/b),完全符合你的需求。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

