2015-02-09 6 views
1

Как изменить фрейм данных так, чтобы индекс строки использовался как заголовок столбца?Строка индекса как заголовок столбца

У меня есть эти данные:

0 1.052 
1 0.542 
2 0.496 
3 0.402 
4 0.278 
0 5.115 
1 4.329 
2 4.121 
3 4.075 
4 4.0088 
... 

Я хотел бы получить его, так что я получаю матрицу с индексом в качестве заголовка столбца и второй колонке под его индекс?

+0

я просто использовал первое решение, которое я получил becouse он работал на то, что им пытаются сделать, я не возражаю сообщения об ошибках, Im действительно плохо с R, так что я стараюсь не делать, чтобы сложные вещи – user3700660

ответ

2

Вам просто нужно использовать матричную функцию и изменить значение по умолчанию byrow:

## Create some example data 
dd = data.frame(x = 0:4, y=runif(5*5)) 

## Specify the number of columns 
## Order by Row 
matrix(dd[,2], ncol=length(unique(dd[,1])), byrow = TRUE) 
0

Не уверен, что я получаю вашу точку зрения, но мне кажется, что вы готовы рассматривать столбец в качестве заголовка, или ключ , В этом контексте я хотел бы просто предложить использовать data.table пакет и особенно функции setkey

1

Вот возможный data.table решение (вы не предоставили имена столбцов, так я предположил, что это V1 и V2)

library(data.table) 
setDT(df)[, indx := cumsum(V1 == 0)] 
dcast(df, indx ~ V1, value.var = "V2") 
# indx  0  1  2  3  4 
# 1: 1 1.052 0.542 0.496 0.402 0.2780 
# 2: 2 5.115 4.329 4.121 4.075 4.0088 

Или еще проще (предложенный @akrun)

library(reshape2) 
acast(df, cumsum(V1 == 0) ~ V1, value.var = 'V2') 

данных

df <- structure(list(V1 = c(0L, 1L, 2L, 3L, 4L, 0L, 1L, 2L, 3L, 4L), 
     V2 = c(1.052, 0.542, 0.496, 0.402, 0.278, 5.115, 4.329, 4.121, 
     4.075, 4.0088)), .Names = c("V1", "V2"), class = "data.frame", row.names = c(NA, 
    -10L)) 
+1

В принципе, я хочу сказать 'library (reshape2); acast (df, cumsum (V1 == 0) ~ V1, value.var = 'V2') ', если OP хотел получить матричный вывод – akrun

+0

@akrun OP сказал, что у них есть кадр данных, но принят матричное решение, поэтому я Я не уверен, что у них там действительно –

+1

Проблема с принятым решением заключается в том, что если одна из комбинаций отсутствует, т.е. 'dd <- dd [-10,]', вы получите предупреждающее сообщение – akrun

0

Вы можете использовать unstack:

unstack(dat, y ~ x) 

где dat это имя вашего фрейма данных, x это имя первого столбца (показатель), и y это имя второго (значение).

Пример:

set.seed(1) 
dat <- data.frame(x = 0:4, y = rnorm(10)) 
# x   y 
# 1 0 -0.6264538 
# 2 1 0.1836433 
# 3 2 -0.8356286 
# 4 3 1.5952808 
# 5 4 0.3295078 
# 6 0 -0.8204684 
# 7 1 0.4874291 
# 8 2 0.7383247 
# 9 3 0.5757814 
# 10 4 -0.3053884 

unstack(dat, y ~ x) 
#   X0  X1   X2  X3   X4 
# 1 -0.6264538 0.1836433 -0.8356286 1.5952808 0.3295078 
# 2 -0.8204684 0.4874291 0.7383247 0.5757814 -0.3053884 
Смежные вопросы