/ Ako transformovať stĺpce do riadkov v R? - r, agregát, pretvar

Ako premeniť stĺpce na riadky v R? - r, agregovať, pretvoriť

Mám taký istý problém. Mám údaje v tomto poradí:; = stĺpec

D1 ;hurs

1  ;0.12

1  ;0.23

1  ;0.34

1  ;0.01

2  ;0.24

2  ;0.67

2  ;0.78

2  ;0.98

a rád to mám takto:

D1; X; X; X; X
1;0.12; 0.23; 0.34; 0.01;
2;0.24; 0.67; 0.78; 0.98;

Chcel by som to zoradiť podľa D1 a chcel by som ho pretvoriť? Má niekto nápad? Musím to urobiť pre hodnoty 7603 D1.

odpovede:

1 pre odpoveď č. 1

Pozrel by som sa do Hadleyho reshape Balík. Robí najrôznejšie skvelé veci. Nižšie uvedený kód bude fungovať s príkladom vašej hračky, ale pravdepodobne existuje elegantnejší spôsob. Jednoducho sa zdá, že vaše údaje sú už v ?melt formulár, takže môžete jednoducho ?cast ono.

Skontrolujte tiež tieto odkazy

http://www.statmethods.net/management/reshape.html

http://had.co.nz/reshape/

library(reshape)

help(package=reshape)
?melt

D1 <- c(1,1,1,1,2,2,2,2)
hurs <- c(.12, .23, .34, .01, .24, .67, .78, .98)
var <- rep(paste("X", 1:4, sep=""), 2)

foo <- data.frame(D1, var, hurs)
foo

cast(foo, D1~var)

1 pre odpoveď č. 2

Vykopávať kostry, ktoré sa pravdepodobne nikdy nebudú nárokovať, prečo ich nepoužiť aggregate()?

dat = read.table(header = TRUE, sep = ";", text = "D1 ;hurs
1  ;0.12
1  ;0.23
1  ;0.34
1  ;0.01
2  ;0.24
2  ;0.67
2  ;0.78
2  ;0.98")
aggregate(hurs ~ D1, dat, c)
#   D1 hurs.1 hurs.2 hurs.3 hurs.4
# 1  1   0.12   0.23   0.34   0.01
# 2  2   0.24   0.67   0.78   0.98

Ak dĺžky každého id v D1 nie sú rovnaké, môžete použiť aj bázu R reshape() po prvom vytvorení premennej „time“:

dat2 <- dat[-8, ]
dat2$timeSeq <- ave(dat2$D1, dat2$D1, FUN = seq_along)
reshape(dat2, direction="wide", idvar="D1", timevar="timeSeq")
#   D1 hurs.1 hurs.2 hurs.3 hurs.4
# 1  1   0.12   0.23   0.34   0.01
# 5  2   0.24   0.67   0.78     NA

0 pre odpoveď č. 3

Predpokladal som, že na D1 je nerovnomerný počet hur (7603 hodnôt)

txt = "D1 ;hurs
1 ;0.12
1 ;0.23
1 ;0.34
1 ;0.01
2 ;0.24
2 ;0.67
2 ;0.78
2 ;0.98"

dat <- read.table(textConnection(txt),header=T,sep=";")
dat$Lp <- 1:nrow(dat)
dat <- dat[order(dat$D1,dat$Lp),]
out <- split(dat$hurs,dat$D1)
out <- sapply(names(out),function(x) paste(paste(c(x,out[[x]]),collapse=";"),";",sep="",collapse=""))

0 pre odpoveď č. 4

reshape2 je v skutočnosti lepšia ako zmena tvaru. Použitie pretvarovania využíva podstatne viac pamäte a času ako pretvarovanie2 (aspoň pre môj konkrétny príklad používajúci niečo ako 9 miliónov riadkov).


0 pre odpoveď č. 5

Mohli by ste skontrolovať balíček preformátovania Hadleyho Wickhama a jeho funkciu casting ()

http://had.co.nz/reshape/