2012-04-18 3 views
4

дано data.frame как этотИспользование литых() для преобразования data.frame

> x <- data.frame(A=c('a','a','b','b'), B=c(1,2,3,4)) 
> x 
    A B 
1 a 1 
2 a 2 
3 b 3 
4 b 4 

Я хотел бы превратить его в

a b 
1 1 3 
2 2 4 

Она должна быть простой операцией, но Я не могу понять, как это сделать. Ближайшим, что у меня есть, является cast(x, . ~ A), который, по крайней мере, не сбой с «неопределенными столбцами», но это все еще не то, что я хочу.

Любая помощь приветствуется.

+0

Уверен, что вы не хотите «расплавиться» первым? –

+0

Есть уже только одна переменная с измеренными (числовыми) значениями, нет? –

ответ

3

Я также пытался понять cast. Ваш желаемый результат показывает значения 1 и 3 в той же строке. Но ваш ввод не предоставляет эту информацию. Добавление столбца id решает проблему.

library(reshape2) 

x <- data.frame(id=c(1, 2, 1, 2), A=c('a', 'a', 'b', 'b'), B=c(1, 2, 3, 4)) 

dcast(x, id ~ A, value.var="B") 
# id a b 
# 1 1 1 3 
# 2 2 2 4 
+0

спасибо, я думал, что порядок был неявным в порядке строк исходного кадра данных –

2

Если вы хотите сохранить значения B в том же порядке, как и в х, вы можете попробовать это:

data.frame(split(x$B, x$A)) 
+0

Спасибо, я не знал 'split'. Это сделает это. –

3

Как это:

data.frame(tapply(x$B, x$A, list)) 

Результат:

a b 
1 1 3 
2 2 4 
+0

полезно также спасибо –

Смежные вопросы