2016-01-23 2 views
0

Привет коллективной мозговой энергии. Вот сделка - у меня есть кадр данных, который выглядит следующим образом:Заполнение нового кадра данных со старыми данными в R

>df 

Mom MomAge 
aa 1 
aa 3 
aa 4 
bb 2 
bb 4 
cc 1 
cc 3 
cc 5 

Каждая строка является ребенок, родившийся маме XX, когда она XX лет. Я хотел бы заполнить новый фрейм данных, который кодирует существующие данные в двоичные ответы (1 = ребенок, родившийся в возрасте мамы X, 0 = ребенок, родившийся в возрасте мамы X) для каждой мамы в возрасте от 1 до 5:

1 2 3 4 5 
aa 1 0 1 1 0  
bb 0 1 0 1 0 
cc 1 0 1 0 1 

до сих пор у меня есть это:

>momlist<-unique(df$Mom) 
>M<-matrix(data = NA, nrow = length(Mom), ncol=5) 
>M<-data.frame(M) 
>rownames(M) <-momlist 
>colnames(M) <-c(1:5) 
>M 
    1 2 3 4 5 
aa NA NA NA NA NA 
bb NA NA NA NA NA 
cc NA NA NA NA NA 

Не знаете, как заполнить M ... Может быть, если/то, а затем цикл? Спасибо заранее!

+3

таблица (ДФ) возможно? – andrnev

+0

Если вы хотите преобразовать его в dataframe: 'as.data.frame.matrix (table (df))' – ytk

ответ

1

Вы можете поворачивать свои данные с помощью dcast от reshape2 и предоставлять функцию для возврата 1 или 0 (вместо суммы по умолчанию).

Настройка данных

txt <- "Mom, MomAge 
aa, 1 
aa, 3 
aa, 4 
bb, 2 
bb, 4 
cc, 1 
cc, 3 
cc, 5" 

df <- read.csv(text = txt, header = TRUE) 

Сводные данные

library(reshape2) 
dcast(df, Mom ~ MomAge, fill=0, function(x){ x>0 }) 

    Mom 1 2 3 4 5 
1 aa 1 0 1 1 0 
2 bb 0 1 0 1 0 
3 cc 1 0 1 0 1 
+0

Ничего себе, что сработало! Спасибо! – PendaFisi

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