【问题标题】:Allocate people to teams based on 33/67% percentile of variable根据 33/67% 的变量百分比将人员分配到团队
【发布时间】:2017-05-30 00:47:55
【问题描述】:

我有一个数据集,我想根据标准将人们分配到不同的组,但是,我希望 R 自动执行此操作。我已将变量分隔为 =67 百分位等。

dfOCEAN <-df[1:60,1:7]
print(colnames(dfOCEAN))
dfOCEAN <- dfOCEAN[complete.cases(dfOCEAN),]

i = 0
  for(i in 1:length(dfOCEAN$factor_e)){
    if(dfOCEAN$factor_e[i] <= quantile(dfOCEAN$factor_e, c(.33))){
      dfOCEAN$Introversion[i] <- 1
    }
    else if(dfOCEAN$factor_e[i] >= quantile(dfOCEAN$factor_e, c(.67))){
      dfOCEAN$Introversion[i] <- 2
    }
     else
     dfOCEAN$Introversion[i] <- 3
  }

i = 0
for(i in 1:length(dfOCEAN$factor_c)){
  if(dfOCEAN$factor_c[i] <=quantile(dfOCEAN$factor_c, c(.33))){
    dfOCEAN$Conscientious[i] <- 1
  }
  else if(dfOCEAN$factor_c[i] >= quantile(dfOCEAN$factor_c, c(.67))){
    dfOCEAN$Conscientious[i] <- 2
  }
  else
    dfOCEAN$Conscientious[i] <- 3
}

然后我尝试使用 Dplyr 的切片函数创建随机样本。

dfOCEANset <- dfOCEAN %>% group_by(c(Introversion, Conscientious)) %>% slice(sample(c(1,2),1))

但是,我无法获得预期的结果。理想情况下,我会检索一个数据框,其中数据将与不同类别的组合进行聚类,并且名称将保留

【问题讨论】:

    标签: r dataframe group-by quantile


    【解决方案1】:

    试试这个无循环(但在没有可重现示例的情况下未经测试)方法:

    dfOCEAN$fac_grp <- c(1,3,2)[ findInterval( dfOCEAN$factor_e,
                               quantile( dfOCEAN$factor_e, c(0, .33, .67)), 
                                   )}
    

    R 旨在用作“向量化”语言,findIntervalquantile 函数都将返回向量,findInterval 提供与其第一个参数相同长度的向量。您要求我们以一种相当不自然的方式进行排列,这增加了一点皱纹,我通过使用 findInterval 的结果作为三项向量的索引来处理这种情况。另一个做类似事情(但返回一个因子)的函数是 cut 函数。

    【讨论】:

    • 您好 42,令人惊叹的答案,这确实消除了实际循环的需要,但是,查询的后半部分希望自动创建团队,由在 2 个因素上排名高或低的人组成。你有什么想法吗?
    • 我用factor_e 说明了如何做到这一点。我不明白其中的困难。似乎很明显如何为factor_c做这件事
    • 确实,那部分是成功的,但是现在有了数据框,我想将数据框分成更小的部分,这样每个更小的数据框代表一个团队,其中排名靠前的人on factro_e 和 facto_c 被分组在一起,而低 facto_e 和 facto_c 等。我想我可以只是对数据帧进行子集化,然后对这些数据帧进行随机抽样以组成更小的团队。
    • 如果您现在使用interaction(fac_grp_e, fac-grp_c),您应该可以使用split 功能。再次,您始终未能发布为演示创建合适基础的代码,这使您有责任使用此类提示来构建代码。制作测试用例不是被访者的责任。
    猜你喜欢
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多