首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将矩阵和数据帧操作为具有相同R脚本的3列数据帧

将矩阵和数据帧操作为具有相同R脚本的3列数据帧
EN

Stack Overflow用户
提问于 2013-09-11 12:15:25
回答 1查看 271关注 0票数 0

我需要一个短的R脚本,它可以将大型矩阵和data.frames重组为3列data.frames。我的当前脚本可以处理矩阵,但在输入data.frame时返回错误消息。对于如何强迫它处理两个类,有什么建议吗?

代码语言:javascript
复制
library(FD)

ds<-dummy$abun #a matrix

#reorganize into 3 column data.frame 
q<-rep.int(row.names(ds),ncol(ds))
p<-rep(colnames(ds),each = (nrow(ds)))
ssf<-data.frame(q,p,as.numeric(ds)) 
names(ssf) <- c("site", "species", "freq")

工作正常,但我希望它能够重组矩阵和数据(即)

代码语言:javascript
复制
ds<-as.data.frame(dummy$abun) #a matrix

#reorganize into 3 column data.frame 
q<-rep.int(row.names(ds),ncol(ds))
p<-rep(colnames(ds),each = (nrow(ds)))
ssf<-data.frame(q,p,as.numeric(ds)) 
names(ssf) <- c("site", "species", "freq")

返回

代码语言:javascript
复制
'Error in data.frame(q, p, as.numeric(ds)) : (list) object cannot be coerced to type 'double'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-11 13:05:48

两点:

  1. 虽然as.numeric将从一个matrix创建一个简单的向量,但是它不会对一个data.frame做同样的事情。data.frame是向量的list,而matrix是具有维属性的向量。因此,另一种选择是首先使用unlist: as.numeric(unlist(ds,use.names = FALSE))
  2. 看起来,您实际上只是在尝试创建一种“长”格式的数据。在本例中,从基本R探索stack,从"reshape2“探索melt。一种可能的办法是: out <- cbind(行名(Ds),堆栈(as.data.frame(Ds)名称(Out) <- c(“向量”,"of",“name”) ##按需要替换:) 或 库(Reshape2) out <-熔体(as.matrix(Ds))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18740947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档