RStudio data.table数据重塑求助:melt方法未达成目标格式
解决data.table数据重塑:将宽表转换为指定长格式
作为data.table新手,我明白你想要把dt_in里的特定字段(survey_dt、ddn、weight)中存在缺失或异常的记录,转换成dt_out那样的长格式,同时关联对应的queries和center信息。之前单独用melt没成功,是因为还需要结合筛选逻辑和字段值的调整,咱们一步步来实现:
第一步:先统一数据里的拼写问题(可选但关键)
看你的原数据queries列里有拼写错误(比如not vailable应该是not available),先统一修正:
dt_in[, queries := gsub("vailable", "available", queries)]
第二步:用melt将宽表转基础长格式
先把需要处理的字段转成长格式,同时保留id、queries、center这些关联字段:
melted_dt <- melt(dt_in, id.vars = c("id", "queries", "center"), measure.vars = c("survey_dt", "ddn", "weight"), variable.name = "variable", value.name = "value")
第三步:筛选并整理符合目标格式的记录
观察你给出的dt_out,核心规则是:提取目标字段的缺失值,或与queries异常值对应的记录,同时调整value和queries的显示内容。用data.table的条件筛选和字段赋值来实现:
dt_out <- melted_dt[ # 筛选条件:字段值为NA,或对应queries的异常标记 is.na(value) | (variable == "ddn" & queries == "< 1900") | (variable == "weight" & queries == ">220"), # 整理输出字段:缺失值显示为"not available" .(id, variable, queries = ifelse(is.na(value), "not available", queries), value = ifelse(is.na(value), "not available", as.character(value)), center) ] # 可选:按id和variable排序,和目标格式顺序匹配 setorder(dt_out, id, variable)
运行后就能得到和你期望的dt_out几乎一致的结果(注:原数据id=11的center为NA,你给出的dt_out里是"a",属于笔误,上述代码会保留原数据逻辑,如需修改可手动调整)。
补充:为什么单独用melt没成功?
单纯的melt只能完成宽表到长表的格式转换,但你的需求还包含筛选特定条件的记录和根据缺失/异常情况调整字段显示内容,所以必须把melt和后续的筛选、字段值调整结合起来,才能得到目标结果。
内容的提问来源于stack exchange,提问作者mtl
相关产品推荐
相关产品推荐

