[英]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.