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

时间:2018-07-17 03:57:06

标签: r multiple-columns reshape

我有一个sftp.upload!('x.txt', 'x.txt', progress: SFTPEventHandler.new) data.frame,看起来像:

R

我想将其重塑为:

                                     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

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

1 个答案:

答案 0 :(得分:0)

使用文件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)