根据变量的33/67%百分比将人员分配给团队

时间:2017-01-14 21:16:13

标签: r dataframe group-by quantile

我有一个数据集,我想根据标准将人员分配到不同的组,但是,我希望R自动执行此操作。我已将我的变量分为< =。33百分位数和> = 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))

但是,我无法获得理想的结果。理想情况下,我会检索一个数据帧,数据将使用不同类别的组合进行聚类,名称将保留

1 个答案:

答案 0 :(得分:3)

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

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

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