我的数据结构是
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组成。
我该如何处理这个问题?
答案 0 :(得分: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)))
答案 1 :(得分: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