使用 spread 或 cast 在 R 中创建因子级指标变量
Creating factor-level indicator variables in R using spread or cast
假设数据结构如下
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、...
理想情况下,我想使用 spread
或 cast
来执行此操作,因为我已经使用了一些这些工具,并且想了解更多有关如何使用它们的信息。
基础 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/dplyr
library(dplyr)
library(tidyr)
gather(mydf, Var, Val, a:d) %>%
unite(yearsVar, years, Var) %>%
spread(yearsVar, Val)
假设数据结构如下
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、...
理想情况下,我想使用 spread
或 cast
来执行此操作,因为我已经使用了一些这些工具,并且想了解更多有关如何使用它们的信息。
基础 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/dplyr
library(dplyr)
library(tidyr)
gather(mydf, Var, Val, a:d) %>%
unite(yearsVar, years, Var) %>%
spread(yearsVar, Val)