У мене така сама проблема. У мене є дані в такому порядку:; = стовпець
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
і мені подобається мати це так:
D1; X; X; X; X
1;0.12; 0.23; 0.34; 0.01;
2;0.24; 0.67; 0.78; 0.98;
Я хотів би відсортувати його щодо D1 і хотів би змінити його? Хтось має ідею? Мені потрібно зробити це для 7603 значень D1.
Відповіді:
1 для відповіді № 1Я б зазирнув до Хедлі reshape
пакет. Він робить всілякі чудові речі. Наведений нижче код буде працювати з вашим прикладом іграшки, але, ймовірно, існує більш елегантний спосіб зробити це. Просто ваші дані вже знаходяться в ?melt
форму, так що ви можете просто ?cast
це
Також перевірте ці посилання
http://www.statmethods.net/management/reshape.html
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 для відповіді № 2
Викопування скелетів, на які, ймовірно, ніколи не вимагатимуть, чому б не використовувати 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
Якщо довжини кожного ідентифікатора в D1 неоднакові, ви також можете використовувати основу R reshape()
після першого створення змінної "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 для відповіді № 3
Я припустив, що є однакова кількість годин на D1 (7603 значення)
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 для відповіді № 4
reshape2 насправді краще, ніж reshape. Використання переформатування використовує значно більше пам’яті та часу, ніж перероблення2 (принаймні для мого конкретного прикладу, використовуючи щось на зразок 9 мільйонів рядків).
0 для відповіді № 5
Ви можете перевірити пакет перетворення Хадлі Вікхема та його функцію cast ()