【问题标题】:Fastest Way to Split Data Frame by Group, shuffle single vector in R按组拆分数据帧的最快方法,在 R 中打乱单个向量
【发布时间】:2016-03-16 12:53:57
【问题描述】:

我熟悉 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))

感谢您的指导!

【问题讨论】:

    标签: r split-apply-combine


    【解决方案1】:

    dplyr 方式。

    library(dplyr)
    all %>% group_by(cp) %>% mutate(party=sample(party))
    

    【讨论】:

      【解决方案2】:

      我们可以使用data.table。我们将“data.frame”转换为“data.table”(setDT(all)),按“cp”分组,sample“party”并将输出分配回“party”列(:=)。

      library(data.table)
      setDT(all)[, party:= sample(party) , by = cp]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-14
        • 1970-01-01
        • 2012-04-06
        • 2022-12-30
        • 2012-04-06
        相关资源
        最近更新 更多