Я заинтересован в реорганизации data.frame в R. Несите со мной, я наткнулся на воспроизводимый пример.

У меня есть номинальная переменная, которая может иметь одно из двух значений. В настоящее время эта номинальная переменная представляет собой столбец. Вместо этого я хотел бы иметь два столбца, представляющих два значения, которые может иметь эта номинальная переменная. Вот пример кадра данных. S - номинальная переменная со значениями T и C.

n <- c(1,1,2,2,3,3,4,4)
s <- c("t","c","t","c","t","c","t","c")
b <- c(11,23,6,5,12,16,41,3)
mydata <- data.frame(n, s, b)

Я бы предпочел фрейм данных, который выглядел бы так

n.n <- c(1,2,3,4)
trt <- c(11,6,23,41)
cnt <- c(23,5,16,3)
new.data <- data.frame(n.n, trt, cnt)

Я уверен, что есть способ использовать mutate или, возможно, tidyr, но я не уверен, какой маршрут лучше, и мой фрейм данных, который я хотел бы переупорядочить, довольно велик.

1
Christopher 11 Май 2016 в 19:03

2 ответа

Лучший ответ

Вы хотите spread:

library(dplyr)
library(tidyr)    
new.data <- mydata %>% spread(s,b)

  n  c  t
1 1 23 11
2 2  5  6
3 3 16 12
4 4  3 41
3
triddle 11 Май 2016 в 16:17

Как насчет unstack(mydata, b~s):

   c  t
1 23 11
2  5  6
3 16 12
4  3 41
3
fishtank 11 Май 2016 в 16:16