繁体   English   中英

将一列data.frame重塑为多列data.frame

[英]Reshape a column data.frame to a many column data.frame

我有一个R data.frame看起来像:

                                     V1  
1   rafael de siqueira campos gil lemos  
2                                 Idade  
3                                    19
4                                Genero
5                                     m
6                              economia
7                              Rodada 1
8                        Tempo gasto: 0
9             Valor apostado: 30.000000
10                               PERDEU
...
161                           Rodada 19
162                      Tempo gasto: 0
163           Valor apostado: 20.000000
164                              PERDEU
165      Valor acumulado FINAL: 1879.00

我想将其重塑为:

name                                    age gender  curse     round   time  bet    result  finalresult
rafael de siqueira campos gil lemos     19  m       economia  1       0     30.00  PERDEU  NA
...
rafael de siqueira campos gil lemos     19  m       economia  19      0     20.00  PERDEU  1879.00

我试图了解该问题的其他解决方案,但没有成功。 我认为这种情况涉及一系列解决方案。 有人可以帮我吗?

使用文件myfile.txt:

rafael de siqueira campos gil lemos
Idade
19
Genero
m
economia

Rodada 1
Tempo gasto: 0
Valor apostado: 30.000000
PERDEU

Rodada 2
Tempo gasto: 15.00
Valor apostado: 40.000000
GANHOU

Rodada 3
Tempo gasto: 0
Valor apostado: 40.000000
PERDEU

Rodada 4
Tempo gasto: 0
Valor apostado: 40.000000
PERDEU

Rodada 5
Tempo gasto: 9.00
Valor apostado: 60.000000
PERDEU

Rodada 6
Tempo gasto: 0
Valor apostado: 60.000000
PERDEU

Rodada 7
Tempo gasto: 0
Valor apostado: 60.000000
PERDEU

Rodada 8
Tempo gasto: 15.00
Valor apostado: 80.000000
PERDEU

Rodada 9
Tempo gasto: 0
Valor apostado: 80.000000
PERDEU

Rodada 10
Tempo gasto: 0
Valor apostado: 80.000000
GANHOU

Rodada 11
Tempo gasto: 9.00
Valor apostado: 50.000000
PERDEU

Rodada 12
Tempo gasto: 0
Valor apostado: 50.000000
PERDEU

Rodada 13
Tempo gasto: 0
Valor apostado: 50.000000
PERDEU

Rodada 14
Tempo gasto: 13.00
Valor apostado: 75.000000
GANHOU

Rodada 15
Tempo gasto: 0
Valor apostado: 75.000000
GANHOU

Rodada 16
Tempo gasto: 0
Valor apostado: 75.000000
PERDEU

Rodada 17
Tempo gasto: 7.00
Valor apostado: 45.000000
PERDEU

Rodada 18
Tempo gasto: 0
Valor apostado: 45.000000
PERDEU

Rodada 19
Tempo gasto: 0
Valor apostado: 45.000000
GANHOU

Valor acumulado FINAL: 1691.50

这是我的丑陋解决方案:

#### Read string data and split into data frame
RawData = readLines("myfile.txt")
for (i in c("Rodada ", "Tempo gasto: ", "Valor apostado: ","Valor acumulado FINAL: ")){ RawData <- gsub(i,"",RawData,fixed=TRUE) }
RawData = as.data.frame(do.call(rbind, strsplit(RawData, split=" {2,10}")), stringsAsFactors=FALSE)
RawData = as.data.frame(t(RawData))
Data <- data.frame("name" = replicate(19,RawData$V1) , "age" = replicate(19,RawData$V3), "gender" = replicate(19,RawData$V5), "curse" = replicate(19,RawData$V6), "period" = NA, "time"  = NA, "bet"  = NA,"result"  = NA,"finalamount" = replicate(19,RawData$V83))
c <- data.frame()
for (w in 7:10){
  for (i in seq(w,length(RawData)-1,4)){
    c <- rbind(c,data.frame(RawData[,i]))
  }
  ifelse(w==7,assign("period",c),ifelse(w==8,assign("time",c),ifelse(w==9,assign("bet",c),assign("result",c))))
  c <- data.frame()
}
Data$period <- period
Data$time <- time
Data$bet <- bet
Data$result <- result

rm(i,w,c,period,time,bet,result)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM