2016-01-14 3 views
-2

У меня есть кадр данных, который выглядит как этотРоу в колонке для частоты в R

> initial 
    Name Status 
1 a Win 
2 b Win 
3 c Loss 

здесь я хочу кадр данных, который выглядит как этот

> final 
    Name Win Loss 
1 a 1 0 
2 b 1 0 
3 c 0 1 

Как я могу добиться этого

ответ

1

Как насчет использования таблицы базы функции?

initial=data.frame(name=c("a","b","c"), 
        status=c("win","loss","win")) 
    name status 
1 a win 
2 b loss 
3 c win 


table(initial) 

    name loss win 
    a 0 1 
    b 1 0 
    c 0 1 

Функция table возвращает объект таблицы. Чтобы преобразовать его в data.frame того типа, который вам нравится, использование команды as.data.frame не поможет, так как это отправляет функцию as.data.frame.table. Вместо этого вы должны пройти таблицу as.data.frame.matrix

final_data_frame= as.data.frame.matrix(table(initial)) 
0

Использование model.matrix() для создания столбцов:

model.matrix(Name ~ -1 + Status, data = initial) 

    StatusLoss StatusWin 
1   0   1 
2   0   1 
3   1   0 
0

Вы можете попробовать использовать основной ifelse

df$Win <- ifelse(df$Status == "Win", 1, 0) 
df$Loss <- ifelse(df$Status == "Loss", 1, 0) 
df 
# Name Status Win Loss 
#1 a Win 1 0 
#2 b Win 1 0 
#3 c Loss 0 1 
0

Мы можем использовать dcast

library(reshape2) 
dcast(initial, Name~Status, value.var='Status', length) 
# Name Loss Win 
#1 a 0 1 
#2 b 0 1 
#3 c 1 0