0

我的数据结构是

id value1 value2
1  0.12   1
2  0.09   0
3  0.05   0
4  0.65   1
5  0.68   0
...

我需要使用 拆分数据value1,例如 0< value1 <=0.2 == 1 或 0.2 < value1 <=0.4 == 2...(最大值value1为 1,最小值value1为 0)

我的观点是,我想利用value1范围作为拆分的参考。

所以,我会期待这样的结果。

id value1 value2 group
1  0.12   1      1 (because value1 is range of 0~0.2)
2  0.09   0      1 (because value1 is range of 0~0.2)
3  0.05   0      1 (because value1 is range of 0~0.2)
4  0.65   1      4 (because value1 is range of 0.6~0.8)
5  0.68   0      4 (because value1 is range of 0.6~0.8)
...

组向量不能有值 2 或 3。这是因为value1不包括 0.2~0.4 和 0.4~0.6 的范围。

另外,我需要按组计算value2因子的比率。

根据上述数据,group1由 33.33% 1 和 66.66% 0 组成。另外,group4由 50% 1 和 50% 0 组成。

我该如何处理这个问题?

4

2 回答 2

3

您可以只使用该cut功能。首先创建一些示例数据:

dd = data.frame(id = 1:20, value1=runif(20))

接下来,定义断点并划分value1

cuts = cut(dd$value1, breaks=seq(0, 1, 0.2))

然后将削减转换为数字(使用一些因子魔法),以获得你想要的:

as.numeric(cuts)

所以

dd$group = as.numeric(cut(dd$value1, breaks=seq(0, 1, 0.2)))
于 2013-04-02T08:24:53.457 回答
1

您可以简单地执行以下操作

DF <- read.table(text='id value1 value2
1  0.12   1
2  0.09   0
3  0.05   0
4  0.65   1
5  0.68   0', header=TRUE)

DF$group <- (DF$value1)%/%0.201 + 1

DF
##   id value1 value2 group
## 1  1   0.12      1     1
## 2  2   0.09      0     1
## 3  3   0.05      0     1
## 4  4   0.65      1     4
## 5  5   0.68      0     4

# to get % of '1' in each group
result <- aggregate(value2 ~ group, DF, function(x) sum(x)/length(x))
result
##   group    value2
## 1     1 0.3333333
## 2     4 0.5000000
于 2013-04-02T09:22:23.467 回答