我有以下示例数据:
library(data.table)
sample <- fread("
1,0,2,NA,cat X, type 1
3,4,3,1,cat X, type 2
1,0,2,2,cat X, type 3
3,4,3,0,cat X, type 4
1,0,2,NA,cat Y, type 1
3,4,3,NA,cat Y, type 2
1,0,2,2,cat Y, type 3
3,4,3,35,cat Y, type 4
1,0,2,NA,cat X, type 1
3,4,3,1,cat X, type 2
1,0,2,2,cat X, type 3
3,4,3,NA,cat X, type 4
1,0,2,NA,cat Y, type 1
3,4,3,NA,cat Y, type 2
1,0,2,2,cat Y, type 3
3,4,3,1,cat Y, type 4
1,0,2,4,cat X, type 1
3,4,3,1,cat X, type 2
1,0,2,2,cat X, type 3
3,4,3,2,cat X, type 4
1,0,2,NA,cat Y, type 1
3,4,3,NA,cat Y, type 2
1,0,2,2,cat Y, type 3
3,4,3,2,cat Y, type 4
")
names(sample) <- c("A","B","C", "D", "cat", "type")
sample <- sample[, observations := sum(!is.na(D)), by = c("cat", "type")]
A B C D cat type observations
1: 1 0 2 NA cat X type 1 1
2: 3 4 3 1 cat X type 2 3
3: 1 0 2 2 cat X type 3 3
4: 3 4 3 0 cat X type 4 2
5: 1 0 2 NA cat Y type 1 0
6: 3 4 3 NA cat Y type 2 0
7: 1 0 2 2 cat Y type 3 3
8: 3 4 3 35 cat Y type 4 3
9: 1 0 2 NA cat X type 1 1
10: 3 4 3 1 cat X type 2 3
...
24: 3 4 3 0 cat Y type 4 3
我想将邻近组的“类型”相加,如果它们少于两个观测值。
例如:将只有1个观测值的“类型1”组与第2组的观测值相加(请参见所需输出的第一行)。
需要将类型进行汇总,直到所有剩余类别至少有2个观测值。所以,“Y类别”的“类型1”和“类型2”需要与“类型3”合并。
我正在尝试编写代码的方式,但遇到了麻烦。
有人可以建议一种自动创建新类型的好方法吗?
我意识到可能存在某些情况,其中可能有两种汇总组的解决方案。然而,只要被相加的组是相邻的组(因此不会将“类型1”添加到“类型4”中),哪些组被相加在一起并不重要。
期望输出:
A B C D cat type new_type observations
1: 1 0 2 NA cat X type 1 type 2 4
2: 3 4 3 1 cat X type 2 type 2 4
3: 1 0 2 2 cat X type 3 type 3 3
4: 3 4 3 0 cat X type 4 type 4 2
5: 1 0 2 2 cat Y type 1 type 3 3
6: 3 4 3 NA cat Y type 2 type 3 3
7: 1 0 2 2 cat Y type 3 type 3 3
8: 3 4 3 0 cat Y type 4 type 4 3
9: 1 0 2 NA cat X type 1 type 2 4
10: 3 4 3 1 cat X type 2 type 2 4
...
24: 3 4 3 0 cat Y type 4 type 4 3
解决方案不一定要使用data.table