【问题标题】:Creating factor-level indicator variables in R using spread or cast在 R 中使用 spread 或 cast 创建因子级指标变量
【发布时间】:2015-02-16 06:11:56
【问题描述】:

假设如下数据结构

MemberID <- c(123,123,234,234)
nbin <- 4
imatrix <- matrix(sample(c(0,1), size=nbin * length(MemberID), replace=TRUE), 
                  nrow=length(MemberID))
colnames(imatrix) <- letters[1:nbin]
years <- c("Y1","Y2","Y1","Y2")

mydf <- data.frame(cbind(MemberID, years, imatrix))

我怎样才能制作一个类似的数据结构,以便我为每个 a、b、c、d 的每个级别都有一个指标。

我想要一个 2 x 9 的数据框,其中包含 MemberID、a.Y1、a.Y2、b.Y1、b.Y2 等列...

理想情况下,我想使用spreadcast 来执行此操作,因为我已经使用了一些工具并且想了解更多关于如何使用它们的信息。

【问题讨论】:

    标签: r reshape dplyr factors tidyr


    【解决方案1】:

    使用tidyr/dplyr

    library(dplyr)
    library(tidyr)
    gather(mydf, Var, Val, a:d) %>% 
                 unite(yearsVar, years, Var) %>%
                 spread(yearsVar, Val)
    

    【讨论】:

      【解决方案2】:

      基础 R 解决方案:

      reshape(mydf, timevar = "years", idvar= "MemberID", direction = "wide")
        MemberID a.Y1 b.Y1 c.Y1 d.Y1 a.Y2 b.Y2 c.Y2 d.Y2
      1      123    0    0    1    0    0    1    0    0
      3      234    1    0    0    0    0    0    1    0
      

      使用reshape2(和magrittr)的解决方案:

      mydf %>% melt(c('MemberID','years')) %>% dcast(MemberID~...)
        MemberID Y1_a Y1_b Y1_c Y1_d Y2_a Y2_b Y2_c Y2_d
      1      123    0    0    1    0    0    1    0    0
      2      234    1    0    0    0    0    0    1    0
      

      【讨论】:

      • 这正是我想要的。谢谢。
      • 不客气。如果有任何人感到雄心勃勃,我很乐意使用tidyr 解决方案......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 2016-07-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      相关资源
      最近更新 更多