为长数据库转换宽数据库,在R中分组变量

为长数据库转换宽数据库,在R中分组变量,r,database,database-design,statistics,wide-column-store,R,Database,Database Design,Statistics,Wide Column Store,我想修改我的数据库。我要做的是将数据库中的每一行都转换为一个人 数据库: 我希望它看起来像这样。例如: ID massaseca Fator Anexo Teor Tempo 1 334,68 AM c 0 0 1 344,19 AM c 0 10 1 347,32 AM c 0 20 1 350,2

我想修改我的数据库。我要做的是将数据库中的每一行都转换为一个人

数据库:

我希望它看起来像这样。例如:

ID    massaseca Fator   Anexo     Teor  Tempo
1       334,68     AM       c      0       0
1       344,19     AM       c      0      10
1       347,32     AM       c      0      20 
1       350,2      AM       c      0      30 
1       352,52     AM       c      0      40
.        .          .       .      .       .
.        .          .       .      .       . 
虽然我在论坛上找到了一些例子,但我无法解决我的问题。我将介绍这两种尝试。当我执行下面的代码时,我发现它覆盖了一些变量,而不是您想要的方式

####################################
require(reshape2)
long <- melt(dados1, id.vars = c("Teor", "Fator"))
melt(dados1, id.vars = 1:2)
melt(dados1, measure.vars = 4:45)
melt(dados1, measure.vars = as.character(10,20,30,
                                         40,50,60,70,80,
                                         90,105,120,135,150,
                                         170,190,210,230,250,
                                         270,290,310,330,350,
                                         360,405,450,510,570,
                                         630,690,750,810,870,
                                         930,990,1050,1110,1170,
                                         1230,1290,1350))

################# CASE 2 ###########
####################################
library(data.table)
long1 <- melt(setDT(dados1), id.vars = c("Teor", "Fator"), variable.name = "Tempo")
long1
melt(setDT(dados1), id.vars = 1:2, variable.name = "Tempo")
melt(setDT(dados1), measure.vars = 4:45, variable.name = "Tempo")
melt(setDT(dados1), measure.vars = as.character(10,20,30,
                                                  40,50,60,70,80,
                                                  90,105,120,135,150,
                                                  170,190,210,230,250,
                                                  270,290,310,330,350,
                                                  360,405,450,510,570,
                                                  630,690,750,810,870,
                                                  930,990,1050,1110,1170,
                                                  1230,1290,1350), variable.name = "Tempo")


####################################
要求(2)

long似乎缺少一个明确的
“id”
列,您可以用
cbind
替换该列。然后,您可以使用base
reformate
,在这里我们从列名中为
times
参数绘制值。(请注意,如果像我一样将
id
设置为第一列,则需要将
1
添加到
variable
s。)


你最好在这里发布一篇文章,而不是让人们从第三方网站下载文件。嗨,卡米尔,非常感谢你的关注。如有必要,我可以在电子邮件中向您发送电子表格。单击我发布的链接。这里有一些示例说明如何将数据添加到问题中或使用常用的数据集。看起来像是一个重塑问题<代码>tidyr::聚集(dados1,Tempo,massaseca,-(1:3))
res <- reshape(cbind(id=1:nrow(dados1), dados1), 
               varying=5:46, 
               v.names="massaseca",
               timevar="Tempo", 
               times=as.numeric(gsub("X", "", tail(names(dados1), -3))), 
               direction="long", sep="")
head(res[order(res$id), ])
#      id Teor Fator Anexo Tempo massaseca
# 1.0   1    0    Am     c     0    334,68
# 1.10  1    0    Am     c    10    344,19
# 1.20  1    0    Am     c    20    347,32
# 1.30  1    0    Am     c    30     350,2
# 1.40  1    0    Am     c    40    352,52
# 1.50  1    0    Am     c    50    354,81