早上好,
我有2个数据帧:(25000,66)和一个阈值表(10,2),其中包含10个组以及每个组的最后一个ID。
在大型数据集中,我有一个名为的变量id
。只是id = row_number()
id
1
2
3
4
5
...
25000
编辑:很多答案,谢谢你的所有想法。阅读时,我意识到我忘记了数据描述中的重要一步,对此我深表歉意。
我正在对原始样本进行合成抽样bigdataset
以产生新的观点。因此,在采样后,id
列看起来像这样:
id
1
2
2.1
3
3.8
4.74
5.12
6
...
25000
这就是为什么我将ween子句与一起使用last_id
来将ID重新分配给他们的组的原因。
阈值表:
last_id group_name
50 grp1
1500 grp2
8900 grp3
...
25000 grp10
我想将新列添加到大数据集中,以便具有id和组名,仅基于id处于阈值表指定的组范围内的条件。
现在我写了这个:
df <- df %>%
dplyr::mutate(group_name = case_when(id < last_id[1,1] ~ last_id[1,2],
between(id, last_id[1,1], last_id[2,1]) ~ last_id[2,2],
between(id, last_id[2,1], last_id[3,1]) ~ last_id[3,2],
between(id, last_id[3,1], last_id[4,1]) ~ last_id[4,2],
between(id, last_id[4,1], last_id[5,1]) ~ last_id[5,2],
between(id, last_id[5,1], last_id[6,1]) ~ last_id[6,2],
between(id, last_id[6,1], last_id[7,1]) ~ last_id[7,2],
between(id, last_id[7,1], last_id[8,1]) ~ last_id[8,2],
between(id, last_id[8,1], last_id[9,1]) ~ last_id[9,2],
id > last_id[9,1] ~ last_id[10,2]))
)
但这不起作用,我得到这个错误:
FUN中的错误(左,右):类型列表和原子类型只能进行比较(5)
而且这段代码看起来很糟糕,必须有另一种使用Apply或其他dplyr函数的方法吗?
感谢您的阅读。
cut
在基数R中可以相对容易地做到这一点:
bigdataset <- data.frame(seq(1, 25000,1))
names(bigdataset) <- 'id'
thresholds <- data.frame(
c(50, 1500, 8900, 10000, 12000, 13000, 14000, 15000, 16000, 25000),
c('grp1','grp2','grp3','grp4', 'grp5','grp6', 'grp7','grp8','grp9','grp10'))
names(thresholds) <- c('last_id','group_name')
cut(bigdataset$id, breaks=breaks=c(min(bigdataset$id),thresholds$last_id + 1), labels=thresholds$group_name[1:10], right=FALSE) -> bigdataset$group_name
输出:
> bigdataset
id group_name
1 1 grp1
2 2 grp1
3 3 grp1
4 4 grp1
5 5 grp1
6 6 grp1
7 7 grp1
8 8 grp1
9 9 grp1
10 10 grp1
11 11 grp1
12 12 grp1
13 13 grp1
14 14 grp1
15 15 grp1
16 16 grp1
17 17 grp1
18 18 grp1
19 19 grp1
20 20 grp1
21 21 grp1
22 22 grp1
23 23 grp1
24 24 grp1
25 25 grp1
26 26 grp1
27 27 grp1
28 28 grp1
29 29 grp1
30 30 grp1
31 31 grp1
32 32 grp1
33 33 grp1
34 34 grp1
35 35 grp1
36 36 grp1
37 37 grp1
38 38 grp1
39 39 grp1
40 40 grp1
41 41 grp1
42 42 grp1
43 43 grp1
44 44 grp1
45 45 grp1
46 46 grp1
47 47 grp1
48 48 grp1
49 49 grp1
50 50 grp2
51 51 grp2
52 52 grp2
53 53 grp2
54 54 grp2
55 55 grp2
56 56 grp2
57 57 grp2
58 58 grp2
59 59 grp2
60 60 grp2
请注意,您需要使用min(bigdataset$id)
; 这样一来,您就有10个课程的11个切入点。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句