【问题标题】:Populating new data frame with old data in R在 R 中用旧数据填充新数据框
【发布时间】:2016-01-23 21:48:56
【问题描述】:

嗨,集体脑力。这是交易 - 我有一个看起来像这样的数据框:

>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

不确定如何填充 M...也许是 if/then 然后是 for 循环?提前谢谢了!

【问题讨论】:

  • 如果要将其转换为数据框:as.data.frame.matrix(table(df))

标签: r dataframe


【解决方案1】:

您可以使用 reshape2 中的 dcast 对数据进行透视,并提供返回 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2016-09-07
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多