使用dcast()遇报错:value.var(mpg)未找到输入的技术求助
解决dcast()报错"value.var (mpg) not found in input"的问题
我来帮你排查这个问题,核心原因是你对melt()的输出结构理解有偏差:
当你执行melt(mtcars, id=c("gear","cyl"), measure.vars = c("mpg","hp"))时,原数据中的mpg和hp这两个数值列会被“融合”成两列:
variable:存储原来的列名(也就是mpg和hp)value:存储对应列的数值
这意味着你的mdata数据框里,根本不存在名为mpg的列——自然dcast()找不到它,所以抛出了报错。
针对你的需求,有两种解决方案:
方案1:仅对mpg进行重塑
如果你只需要基于mpg数据生成宽表,可以修改melt()的参数,只把mpg设为measure.vars,然后在dcast()中指定value.var="value"(因为融合后数值都存在value列里):
data("mtcars") # 建议只加载reshape2即可,避免reshape和reshape2的函数冲突 install.packages("reshape2") library(reshape2) # 只融合mpg列 mdata <- melt(mtcars, id=c("gear","cyl"), measure.vars = "mpg") # 使用value作为数值列 castData <- dcast(mdata, gear ~ cyl, value.var="value")
或者如果你已经融合了mpg和hp,可以先筛选出mpg对应的行再重塑:
mdata <- melt(mtcars, id=c("gear","cyl"), measure.vars = c("mpg","hp")) # 筛选variable为mpg的行 mpg_subset <- subset(mdata, variable == "mpg") castData <- dcast(mpg_subset, gear ~ cyl, value.var="value")
方案2:同时对mpg和hp进行重塑
如果你想保留两个变量的重塑结果,可以把variable加入dcast()的公式中,这样会生成区分mpg和hp的宽表:
castData <- dcast(mdata, gear ~ cyl + variable, value.var="value")
最后提醒一句:尽量不要同时加载reshape和reshape2包,两者的函数(比如cast系列)可能会产生命名冲突,优先使用reshape2的函数就足够啦。
内容的提问来源于stack exchange,提问作者Willy Mercier
相关产品推荐
相关产品推荐

