【发布时间】:2016-02-28 23:35:02
【问题描述】:
我正在编写脚本来重新格式化数据,但我无法使用正确的值/名称填充它。
数据开头为:
data1=
Date conc1 conc2 conc3
Control XXXX XXXX XXXX
Control XXXX XXXX XXXX
Control XXXX XXXX XXXX
Treatment1 XXXX XXXX XXXX
Treatment1 XXXX XXXX XXXX
Treatment1 XXXX XXXX XXXX
并且需要以
结尾formatdata1=
Treatment conc value
Control conc1 XXXX
Control conc1 XXXX
Control conc1 XXXX
Control conc2 XXXX
Control conc2 XXXX
Control conc2 XXXX
Control conc3 XXXX
Control conc3 XXXX
Control conc3 XXXX
Treatment1 conc1 XXXX
Treatment1 conc1 XXXX
Treatment1 conc1 XXXX
Treatment1 conc2 XXXX
Treatment1 conc2 XXXX
Treatment1 conc2 XXXX
Treatment1 conc3 XXXX
Treatment1 conc3 XXXX
Treatment1 conc3 XXXX
目前我已经预先分配了正确尺寸的矩阵:
formatdata1<-array(0,dim=c(nrow(data1[+1])*ncol(data1[-1])+1,3))
索引的唯一治疗名称:
unik<-!duplicated(data2[,1])
ind<-seq_along(data2[,1])[unik]
Treatname<-data.frame(data2[,1][unik]) #extracted the unique names
并用标题填充矩阵的第一行:
formatdata1[1,]=c("Treatment","Conc","Value")
所以我现在想做的是使用ind 和Treatname 用正确数量的治疗名称填充formatdata 的第1 列的其余部分。
我目前拥有的是这样的一行:
formatdata1[ind[1]+1:((ind[2]-1)*ncol(data2[-1])),1]<-Treatname[1,1]
这确实填充了正确数量的单元格(所以我相信我的索引是正确的),但是,而不是我想要的治疗名称(在本例中为Control)它只填充了1。
如何让它使用名称而不是数字?我想我可以向<-Treatname[1,1] 添加一些内容?
【问题讨论】:
-
您似乎正试图取消透视原始数据表。我的假设是否正确?
-
@TimBiegeleisen 刚刚查看了 unpivot 的含义,是的,就是这样!
-
@TimBiegeleisen
melt是在这里使用的正确函数吗?我想这会为我节省大量的索引和手动填充矩阵。 -
是的。现在发布一些东西。
标签: r matrix data-manipulation