按组拆分数据帧的最快方法,在 R 中随机播放单个向量
Fastest Way to Split Data Frame by Group, shuffle single vector in R
我熟悉 R 中的一些拆分-应用-组合函数,例如 ddply,但我不确定如何拆分数据框、修改每个子集中的单个变量,然后重新组合子集。我可以手动执行此操作,但肯定有更好的方法。
在我的例子中,我试图在一个组中打乱单个变量(但 none 其他变量)。这是一个排列分析,所以我做了很多次,因此想加快速度。
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))
感谢任何指导!
我们可以使用data.table
。我们将 'data.frame' 转换为 'data.table' (setDT(all)
),按 'cp'、sample
和 'party' 分组并赋值 (:=
)该输出返回到 'party' 列。
library(data.table)
setDT(all)[, party:= sample(party) , by = cp]
dplyr
方式。
library(dplyr)
all %>% group_by(cp) %>% mutate(party=sample(party))
我熟悉 R 中的一些拆分-应用-组合函数,例如 ddply,但我不确定如何拆分数据框、修改每个子集中的单个变量,然后重新组合子集。我可以手动执行此操作,但肯定有更好的方法。
在我的例子中,我试图在一个组中打乱单个变量(但 none 其他变量)。这是一个排列分析,所以我做了很多次,因此想加快速度。
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))
感谢任何指导!
我们可以使用data.table
。我们将 'data.frame' 转换为 'data.table' (setDT(all)
),按 'cp'、sample
和 'party' 分组并赋值 (:=
)该输出返回到 'party' 列。
library(data.table)
setDT(all)[, party:= sample(party) , by = cp]
dplyr
方式。
library(dplyr)
all %>% group_by(cp) %>% mutate(party=sample(party))