我熟悉R中的一些split-apply-combine函数,比如ddply,但我不确定如何拆分数据帧,修改每个子集中的单个变量,然后重新组合子集。我可以手动完成,但肯定有更好的方法。
在我的示例中,我试图在组中混合单个变量(但没有其他变量)。这是一个排列分析,所以我做了很多次,因此希望加快速度。
allS <- split(all, f=all$cp)
for(j in 1:length(allS)){
allS[[j]]$party <- sample(x=allS[[j]]$party)
}
tmpAll <- rbind.fill(allS)
示例数据框:
all <- data.frame(cp=factor(1:5), party=rep(c("A","B","C","D"), 5))
感谢任何方向!
答案 0 :(得分:3)
我们可以使用data.table
。我们转换了&#39; data.frame&#39;到&#39; data.table&#39; (setDT(all)
),按&#39; cp&#39;,sample
分组&#39;并将(:=
)的输出分配给&#39;列。
library(data.table)
setDT(all)[, party:= sample(party) , by = cp]
答案 1 :(得分:1)
dplyr
方式。
library(dplyr)
all %>% group_by(cp) %>% mutate(party=sample(party))