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