R:将存储在行中的不同度量值的副本转换为单个列
如果标题有误导性,我非常抱歉,因为我不知道如何正确解释(不确定术语是什么) 我有一些数据基本上是这样的:R:将存储在行中的不同度量值的副本转换为单个列,r,dataframe,R,Dataframe,如果标题有误导性,我非常抱歉,因为我不知道如何正确解释(不确定术语是什么) 我有一些数据基本上是这样的: a<-c('AA01','AA02','AB01') b<-c('AA','AA','AB') c<-c('Y','N','N') d<-c(1,2,3) e<-c(4,5,6) f<-c(7,8,9) g<-c(11,22,33) h<-c(44,55,66) i<-c(77,88,99) cols<-c("SampID","Ch
a<-c('AA01','AA02','AB01')
b<-c('AA','AA','AB')
c<-c('Y','N','N')
d<-c(1,2,3)
e<-c(4,5,6)
f<-c(7,8,9)
g<-c(11,22,33)
h<-c(44,55,66)
i<-c(77,88,99)
cols<-c("SampID","Characteristic1","Characteristic2","Mes1Rep1","Mes1Rep2","Mes1Rep3","Mes2Rep1","Mes2Rep2","Mes2Rep3")
df<-data.frame(a,b,c,d,e,f,g,h,i)
colnames(df)<-cols
df
SampID Characteristic1 Characteristic2 Mes1Rep1 Mes1Rep2 Mes1Rep3 Mes2Rep1 Mes2Rep2 Mes2Rep3
1 AA01 AA Y 1 4 7 11 44 77
2 AA02 AA N 2 5 8 22 55 88
3 AB01 AB N 3 6 9 33 66 99
SampID Characteristic1 Characteristic2 Replicates Measurement1 Measurement2
1 AA01 AA Y Rep1 1 11
2 AA01 AA Y Rep2 4 44
3 AA01 AA Y Rep3 7 77
4 AA02 AA N Rep1 2 22
5 AA02 AA N Rep2 5 55
6 AA02 AA N Rep3 8 88
7 AB01 AB N Rep1 3 33
8 AB01 AB N Rep2 6 66
9 AB01 AB N Rep3 9 99
我在R怎么做?我想我可以直接转置行本身,但是是否有某种方法可以自动复制冗余值(例如本例中的“SampID”)
或者除了手动操作之外别无选择
感谢您抽出时间阅读本文,并提供您的帮助和/或指导 我们可以使用
melt
fromdata.table
,它可以采取多种测量方法
模式
library(data.table)
melt(setDT(df), measure = patterns("Mes1", "Mes2"),
variable.name = "Replicates",
value.name = c("Measurement1", "Measurement2"))[
order(SampID)][, Replicates := paste0("Rep", Replicates)][]
# SampID Characteristic1 Characteristic2 Replicates Measurement1 Measurement2
#1: AA01 AA Y Rep1 1 11
#2: AA01 AA Y Rep2 4 44
#3: AA01 AA Y Rep3 7 77
#4: AA02 AA N Rep1 2 22
#5: AA02 AA N Rep2 5 55
#6: AA02 AA N Rep3 8 88
#7: AB01 AB N Rep1 3 33
#8: AB01 AB N Rep2 6 66
#9: AB01 AB N Rep3 9 99
或者使用
base R
reshape(df, idvar = c("SampID", "Characteristic1", "Characteristic2"),
varying = list(4:6, 7:9), direction = "long")
非常感谢@akrun,这个很有魅力!如果我可以问一下,是否有任何方法可以在不使用
数据表的情况下完成相同的任务?@Dunois我们可以使用从基R
重新塑造!我想我需要阅读一些文档来更好地理解所有这些。再次感谢您,祝您周末愉快。:)@Dunois如果您检查?melt
或?reformate
将获得有关参数和示例的更多信息。祝你周末愉快。谢谢