gpt4 book ai didi

R:尝试确定每个数据点在哪个十分位数中,对于数据框中的所有变量

转载 作者:行者123 更新时间:2023-12-05 06:44:01 25 4
gpt4 key购买 nike

我有一些数据包含消费者愿意为某些服务支付的价格信息。我试图通过使用 cut 函数找到每个响应落入的十分位数,用于多个服务。

for (i in 2:13){
x<-quantile(data1[,i],c(0,.1,.2,.3,.4,.5,.6,.7,.8,.9,1),na.rm=TRUE)

data1[paste(names(data1[i]), "deciles", sep="_")] <- cut(data1[,i], breaks=x, includ)
}

但是,我有两个问题:有些变量的两个十分位数是相同的值(例如 0 =0,.1=0),cut 函数不接受这些变量。此外,对于代码确实有效的初始列,我得到的是实际的十分位数而不是十分位数(例如,“(1.99,2.56]”而不是 .2。

如果有人有任何想法,我将不胜感激。

最佳答案

对于第一个问题:您只能使用unique 中断并将它们传递给cut。第二,将因子转换为整数,并使用整数作为 probs 向量中的索引,以提取适当的分位数间隔。

## Some sample data, the third column will fail for `cut`
set.seed(0)
data1 <- data.frame(x=rnorm(100), y=rnorm(100), z=sample(0:5, 100, rep=T))
qs <- seq(0, 1, by=0.1) # probs for quantile
for (i in 1:3){
x <- quantile(data1[,i], qs, na.rm=TRUE)
used <- qs[which(diff(c(0, x)) > 0)] # which quantiles worked
cuts <- cut(data1[,i], breaks=unique(x), include=T) # factors as you had them
data1[paste(names(data1[i]), "deciles", sep="_")] <- cuts
data1[paste(names(data1[i]), "num", sep="_")] <- used[as.integer(cuts)] # numeric values
}
# x y z x_deciles x_num y_deciles y_num z_deciles
# 1 1.2629543 0.7818592 0 (1.24,2.44] 1.0 (0.78,1.5] 0.9 [0,1.7]
# 2 -0.3262334 -0.7767766 3 (-0.421,-0.252] 0.4 (-0.956,-0.714] 0.3 (2,3]
# 3 1.3297993 -0.6159899 1 (1.24,2.44] 1.0 (-0.714,-0.459] 0.4 [0,1.7]
# 4 1.2724293 0.0465803 5 (1.24,2.44] 1.0 (0.0262,0.376] 0.7 (4,5]
# 5 0.4146414 -1.1303858 5 (0.234,0.421] 0.7 [-1.68,-1.12] 0.1 (4,5]
# 6 -1.5399500 0.5767188 5 [-2.22,-1.07] 0.1 (0.376,0.78] 0.8 (4,5]
# z_num
# 1 0.3
# 2 0.6
# 3 0.3
# 4 0.8
# 5 0.8
# 6 0.8

关于R:尝试确定每个数据点在哪个十分位数中,对于数据框中的所有变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31171824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com