R包重塑函数融化错误:使用很多因素时在数据中找不到id变量

Posted

技术标签:

【中文标题】R包重塑函数融化错误:使用很多因素时在数据中找不到id变量【英文标题】:R package reshape function melt error: id variables not found in data when working with a lot of factors 【发布时间】:2012-09-01 11:03:38 【问题描述】:

我正在处理来自mothur 的稀疏输出,它基本上为我提供了一个数据集,其中包含采样的序列数和多个样本中的唯一序列数。我想使用 ggplot2 来可视化这些数据,因此需要使用 meltwide 转换为 long 格式。

问题是由于melt 的错误,我无法完成这项工作。这基本上说明了

错误:在数据中找不到 id 变量:1、3、6、(...等)

由于原始数据集的大小,在这里共享它是不切实际的,但是应该能够使用以下代码重新创建相同的问题:

a<-seq(0,300,3)
b<-runif(length(a))
c<-runif(length(a))
d<-as.data.frame(cbind(a,b,c))
d$a<-as.factor(d$a)
melt(d,d$a)

这给出了完全相同的错误:

错误:在数据中找不到 id 变量:0,3,6,9, (...)

我看不出我做错了什么。我在 ubuntu 服务器 12.04 上使用 R 2.15.1。函数reshape::meltreshape2::melt 都会导致相同的错误。

【问题讨论】:

【参考方案1】:

你应该使用:

melt(d, id.vars="a")
      a variable       value
1     0        b 0.019199459
2     3        b 0.693699677
3     6        b 0.937592641
4     9        b 0.299259963
5    12        b 0.485403439
...

?melt.data.frame的帮助下:

数据 要融化的数据框

id.vars id 变量的向量。可以是整数(可变位置)或 字符串(变量名)如果为空,将使用所有非测量变量

因此,您的 id.vars 参数应该是名称的字符向量,例如“a”或数字向量,例如1。此向量的长度应等于您想要作为 id 的列数。

相反,您使用的因子包含的元素远远多于数据中的列数。

【讨论】:

非常感谢您的回答。之前用过melt功能,但是在帮助中明显忽略了。 @FMKerckhof:这是一个相当普遍的认知错误。您需要提供该列的“名称”作为要熔化的第二个参数,而不是提供 d$a 返回的该列中的值。在这种情况下,您可以只使用数字 1。

以上是关于R包重塑函数融化错误:使用很多因素时在数据中找不到id变量的主要内容,如果未能解决你的问题,请参考以下文章

IntelliJ 编译时在同一个包中找不到类

打字稿错误使用googlemaps javascript API时在ionic2中找不到名称'google'

归档 ipa 时在 bundle 中找不到 main~ipad.storyboardc

为 arm64 Android 手机构建应用程序包时在 ApplicationInfo.nativeLibraryDir 中找不到本机库

TS-2304 错误 - 在“.ts”文件中导入“jquery”时在 TypeScript 中找不到名称“Iterable”

收到错误:尝试创建/迁移/运行时在路径中找不到“nmake”