嗨集体脑力。这是交易 - 我有一个如下所示的数据框:
>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 ...也许是if / then然后是for循环?提前谢谢了!
答案 0 :(得分: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