2016-01-23 77 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到5歲的每個母親填充一個新的數據框,將現有數據編碼爲二進制迴應(1 =孩子出生在X,0 =沒有孩子出生在X歲):

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 

不知道如何填充中號......也許,如果/然後再一個循環的?提前謝謝了!

+3

表(DF)吧? – andrnev

+0

如果你想將它轉換爲一個數據幀:'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