2016-07-12 4 views
-4

У меня есть данные в длинном формате. Мне нужно переформатировать в широкоформатный формат с помощью функции Reshape.can, кто-то поможет мне в этом.формирование данных с использованием функции изменения формы

Длинный формат:

Project Value 
    Self 500 
Myself 300 
    Yours 400 
    Self 200 
Myself 600 
    Yours 700 
    Self 800 
Myself 900 
    Yours 200 

Широкий формат:

Project Value Project1 Value1 Project2 Value2 
    Self 500 Myself 300 Yours 400 
    Self 200 Myself 600 Yours 700 
    Self 800 Myself 900 Yours 200 
+0

Привет, вы получите помощь более быстро, если вы предоставляете свои данные в этом можно в формате быть непосредственно прочитанным в R. Самый быстрый способ создать это - использовать 'dput (df)', где df - ваш dat рама. – Edwin

+0

Опция без изменения: 'do.call (cbind, split (df, df $ Project))' –

+0

что вы пробовали? Что пошло не так? – agenis

ответ

1

Как предложено Docendo Discimus, можно легко сделать, как.

> a 
    Project Value 
1 Self 500 
2 Myself 300 
3 Yours 400 
4 Self 200 
5 Myself 600 
6 Yours 700 
7 Self 800 
8 Myself 900 
9 Yours 200 

b <- do.call(cbind, split(a, a$Project)) 

> b 
    Myself.Project Myself.Value Self.Project Self.Value Yours.Project Yours.Value 
2   Myself   300   Self  500   Yours   400 
5   Myself   600   Self  200   Yours   700 
8   Myself   900   Self  800   Yours   200 
1
df$id <- ave(integer(nrow(df)),df$Project,FUN=seq_along); 
df$time <- ave(character(nrow(df)),df$id,FUN=function(x) c('',seq_len(length(x)-1L))); 
reshape(df,dir='w',sep='')[-1L]; 
## Project Value Project1 Value1 Project2 Value2 
## 1 Self 500 Myself 300 Yours 400 
## 4 Self 200 Myself 600 Yours 700 
## 7 Self 800 Myself 900 Yours 200 

данных

df <- data.frame(Project=c('Self','Myself','Yours','Self','Myself','Yours','Self','Myself', 
'Yours'),Value=c(500L,300L,400L,200L,600L,700L,800L,900L,200L),stringsAsFactors=F); 
1

Вот вариант с использованием data.table

library(data.table) 
dcast(setDT(df1)[, c("id", "id1") := .(1:.N, .GRP), Project], 
        id~ id1, value.var= c("Project", "Value"))[, id := NULL][] 
# Project_1 Project_2 Project_3 Value_1 Value_2 Value_3 
#1:  Self Myself  Yours  500  300  400 
#2:  Self Myself  Yours  200  600  700 
#3:  Self Myself  Yours  800  900  200 
Смежные вопросы