如何使每个唯一的观测值成为R中的一个因子w/a二元响应?

如何使每个唯一的观测值成为R中的一个因子w/a二元响应?,r,loops,refactoring,R,Loops,Refactoring,我有一个数据集,如: id region 1 2 1 3 2 1 3 4 3 5 id region1 region2 region3 region4 region5 1 0 1 1 0 0 2 1 0 1 0 0 3 0 0 0 1 1 我想创建一个数据集,如:

我有一个数据集,如:

id   region
 1     2
 1     3
 2     1
 3     4
 3     5
id   region1 region2 region3 region4 region5
 1     0         1      1       0      0
 2     1         0      1       0      0
 3     0         0      0       1      1
我想创建一个数据集,如:

id   region
 1     2
 1     3
 2     1
 3     4
 3     5
id   region1 region2 region3 region4 region5
 1     0         1      1       0      0
 2     1         0      1       0      0
 3     0         0      0       1      1
我一直在使用一个手写循环,每次都会创建一个因子区域,但我希望有某种方法可以自动化这个过程

我还尝试了以下失败的方法

n <- 1
while(n <= nrow(region_list))  {
  paste("R",as.character(region_list$region_id[n])) <- subset(region_list, region_list$region_id == n)
  n <- n + 1
}

n此解决方案使用
ddply
formplyr但任何类似的拆分应用联合收割机工具将使用相同的基本部件:

dat <- read.table(text = "id   region
 1     2
 1     3
 2     1
 3     4
 3     5",header = TRUE,sep = "",stringsAsFactors = TRUE)

dat$region <- factor(dat$region)

foo <- function(x){
    res <- as.integer(levels(x$region) %in% x$region)
    names(res) <- paste0("region",1:5)
    res
}

ddply(dat,.(id),.fun = foo)
   id region1 region2 region3 region4 region5
1  1       0       1       1       0       0
2  2       1       0       0       0       0
3  3       0       0       0       1       1

dat
DF谢谢@Roland。看起来我可能需要做:DF2还有一个问题:对于一个类似的表,但是id重复的表,我应该使用什么值参数来只放置(1)或(0)而不是频率?不,这没有意义,因为
cast
返回一个data.frame。X由
data.frame
check.names
函数引入,因此您可能需要在对
data.frame
的一次调用中设置
check.names=FALSE
。然而,没有更多的信息,我无法复制。我不明白你的第二句话。也许你应该问一个新的问题。我相信这可能也行得通,但第一个回答似乎更容易理解,并且可以根据需要执行此功能的表的数量进行复制。