我有一个数据集,我想根据标准将人员分配到不同的组,但是,我希望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))
但是,我无法获得理想的结果。理想情况下,我会检索一个数据帧,数据将使用不同类别的组合进行聚类,名称将保留
答案 0 :(得分:3)
尝试无循环(但在没有可重现的示例的情况下未经测试)方法:
dfOCEAN$fac_grp <- c(1,3,2)[ findInterval( dfOCEAN$factor_e,
quantile( dfOCEAN$factor_e, c(0, .33, .67)),
)}
R旨在用作“矢量化”语言,findInterval
和quantile
函数都将返回向量,findInterval
给出的向量与第一个参数的长度相同。你添加了一点皱纹,要求我们以一种相当不自然的方式进行排列,我通过使用findInterval的结果作为三项向量的索引来处理。执行类似操作(但返回一个因子)的另一个函数是cut函数。