2014-11-28 4 views
1

У меня есть кадр данных, который выглядит как этотПреобразование имен столбцов грести в R

v1 <- c(1,2,3,4,5,6) 
v2 <- c(2,3,4,3,5,1) 
group <- c("A","B","C","D","E","G") 

df1 <- data.frame(v1,v2,group) 

v1 v2 group 
1 2 A 
2 3 B 
3 4 C 
4 3 D 
5 5 E 
6 1 G 

, и я хочу, чтобы преобразовать его выглядеть следующим образом:

v sale group 
v1  2 A 
v1  3 B 
v1  4 C 
v1  3 D 
v1  5 E 
v1  1 G 
v2  1 A 
v2  2 B 
v2  3 C 
v2  4 D 
v2  5 E 
v2  6 G 

Похоже, это обратное изменение формы, но я не уверен, что использовать

заранее.

+0

Как продажа колонки пришли? Это дополнительные данные, которые вы хотите объединить? – Chitrasen

+0

@ Чистые продажи - это значение v1 и v2 – jbest

+0

Я пытаюсь преобразовать формат большого формата в длинный формат в r – jbest

ответ

1
library(reshape) 
v1 <- c(1,2,3,4,5,6) 
v2 <- c(2,3,4,3,5,1) 
group <- c("A","B","C","D","E","G") 
df1 <- data.frame(v1,v2,group) 
melt(df1) 

    group variable value 
1  A  v1  1 
2  B  v1  2 
3  C  v1  3 
4  D  v1  4 
5  E  v1  5 
6  G  v1  6 
7  A  v2  2 
8  B  v2  3 
9  C  v2  4 
10  D  v2  3 
11  E  v2  5 
12  G  v2  1 
1

Это можно сделать как без внешней упаковки.

do.call(rbind,apply(df1,1,function(x){data.frame(v=names(x)[1:2],sale=unlist(x[1:2]),group=x[3])})) 
  • Функция переписать строку исходного dataframe в качестве нового кадра данных со структурой вы хотите.
  • Применить создать список этих новых кадров данных и
  • do.call объединить эти несколько фреймов данных в качестве нового фрейма данных.
2

Вы также можете использовать stack из base R

cbind(setNames(stack(df1[,-3]),c('sale','v')), group=df1$group) 
# sale v group 
#1  1 v1  A 
#2  2 v1  B 
#3  3 v1  C 
#4  4 v1  D 
#5  5 v1  E 
#6  6 v1  G 
#7  2 v2  A 
#8  3 v2  B 
#9  4 v2  C 
#10 3 v2  D 
#11 5 v2  E 
#12 1 v2  G 
3

Другой вариант с tidyr:

library(tidyr) 

gather(df1, v, Sale, v1:v2) 

# group  v Sale 
#1  A v1 1 
#2  B v1 2 
#3  C v1 3 
#4  D v1 4 
#5  E v1 5 
#6  G v1 6 
#7  A v2 2 
#8  B v2 3 
#9  C v2 4 
#10  D v2 3 
#11  E v2 5 
#12  G v2 1 
Смежные вопросы