2016-01-23 79 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