我在R中有一个名为tableOne的表:
idNum binaryVariable salePrice
2 1 55.56
4 0 88.33
15 0 4.45
87 1 35.77
... ... ...
我想使用:summary(tableOne $ salePrice)生成的值,通过salePrice创建四个四分位数。然后,我想创建一个列tableOne $ quartile,每行sortPrice所在的四分位数。它看起来像:
idNum binaryVariable salePrice quartile
2 1 55.56 3
4 0 88.33 4
15 0 4.45 1
87 1 35.77 2
... ... ... ...
有什么建议吗?
答案 0 :(得分:49)
这应该这样做:
tableOne <- within(tableOne, quartile <- as.integer(cut(salesPrice, quantile(salesPrice, probs=0:4/4), include.lowest=TRUE)))
......一些细节:
within
函数非常适合计算新列。您不必将列引用为
tableOne$salesPrice
等。
tableOne <- within(tableOne, quartile <- <<<some expression>>>)
quantile
函数计算分位数(或者在您的情况下,四分位数)。 0:4/4
评估为c(0, 0.25, 0.50, 0.75, 1)
。
最后,cut
函数将您的数据拆分为这些四分位数。但是,您会得到一个名字很奇怪的factor
,因此as.integer
会将其转换为群组1,2,3,4
。
尝试?within
等,详细了解此处提及的功能......
答案 1 :(得分:7)
data.table方法
library(data.table)
tableOne <- setDT(tableOne)[, quartile := cut(salesPrice, quantile(salesPrice, probs=0:4/4), include.lowest=TRUE, labels=FALSE)]
答案 2 :(得分:3)
在labels=FALSE
中设置参数cut()
会将类别名称作为整数返回。见?cut
tableOne <- within(tableOne, quartile <- cut(salesPrice, quantile(salesPrice, probs=0:4/4), include.lowest=TRUE, labels=FALSE))
答案 3 :(得分:0)
您可以使用以下脚本
tableOne$Quartile<-ifelse(tableOne$salesPrice<=quantile(tableOne$salesPrice,c(0.25)),1,
ifelse(tableOne$salesPrice<=quantile(tableOne$salesPrice,c(0.5)),2,
ifelse(tableOne$salesPrice<=quantile(tableOne$salesPrice,c(0.75)),3,
ifelse(tableOne$salesPrice<=quantile(tableOne$salesPrice,c(1)),4,NA))))
答案 4 :(得分:0)
使用软件包cutr
,我们可以做到:
for(int i=0; i<5; i++) {
String buttonID = "guia" + i;
int resID = getResources().getIdentifier(buttonID, "id", getPackageName());
buttons[i] = ((Button) findViewById(resID));
buttons[i].setVisibility(View.GONE);
}
答案 5 :(得分:0)
使用dplyr,您可以使用ntile函数:
ntile(x, n)
tableOne$quartile <- ntile(tableOne$salesPrice, 4)
这将在表中添加一列,为基于行的价格分位数向每行分配一个基于n的分位数。
注意:此方法从较低的值1开始,然后从那里开始向上。
答案 6 :(得分:0)
以下代码创建一个ntile组向量:
qgroup = function(numvec, n = 4){
qtile = quantile(numvec, probs = seq(0, 1, 1/n))
out = sapply(numvec, function(x) sum(x >= qtile[-(n+1)]))
return(out)
}