gpt4 book ai didi

r - 使用计算的标签从groupby创建一列

转载 作者:行者123 更新时间:2023-12-04 10:33:25 24 4
gpt4 key购买 nike

我有一个数据框,我想根据另一列上的groupby创建一个数据框列。分组依据应在列上以50为增量,标签应为分组编号中的中间数字。我在这里用可重现的示例进行演示。

这是数据框

das <- data.frame(val=1:27,
weigh=c(20,25,37,38,50,52,56,59,64,68,69,70,75,76,82,85,90,100,109,150,161,178,181,179,180,201,201))

val weigh
1 1 20
2 2 25
3 3 37
4 4 38
5 5 50
6 6 52
7 7 56
8 8 59
9 9 64
10 10 68
11 11 69
12 12 70
13 13 75
14 14 76
15 15 82
16 16 85
17 17 90
18 18 100
19 19 109
20 20 150
21 21 161
22 22 178
23 23 181
24 24 179
25 25 180
26 26 201
27 27 201


所需的输出将是

    val  weigh label
1 1 20 45
2 2 25 45
3 3 37 45
4 4 38 45
5 5 50 45
6 6 52 45
7 7 56 45
8 8 59 45
9 9 64 45
10 10 68 45
11 11 69 45
12 12 70 45
13 13 75 95
14 14 76 95
15 15 82 95
16 16 85 95
17 17 90 95
18 18 100 95
19 19 109 95
20 20 150 145
21 21 161 145
22 22 178 195
23 23 181 195
24 24 179 195
25 25 180 195
26 26 201 195
27 27 201 195


这里的45是通过20+(20 + 50)/ 2 = 45来计算的,其中20是开始的位置,而20 + 50 = 70是该组需要停止的位置。标签是20到70之间的中间数字,即45。

与其他标签类似

 70+(70+50)/2= 95
120 + (170)/2= 145
170 + (220)/2 = 195


我是R的新手,曾尝试在这里查看许多资源,但找不到任何可以完成类似操作的东西。我能找到的最接近的是使用cut2进行分组

df %>% mutate(label = as.numeric(cut2(weigh, g=5))) 

最佳答案

library(dplyr)

# create your breaks
breaks = unique(c(seq(min(das$weigh), max(das$weigh)+1, 50), max(das$weigh)+1))

das %>%
group_by(group = cut(weigh, breaks, right=F)) %>% # group by intervals
mutate(group2 = as.numeric(group), # use the intervals as a number
label = (breaks[group2]+breaks[group2]+50)/2) %>% # call the corresponding break value and calculate your label
ungroup()

# # A tibble: 27 x 5
# val weigh group group2 label
# <int> <dbl> <fct> <dbl> <dbl>
# 1 1 20 [20,70) 1 45
# 2 2 25 [20,70) 1 45
# 3 3 37 [20,70) 1 45
# 4 4 38 [20,70) 1 45
# 5 5 50 [20,70) 1 45
# 6 6 52 [20,70) 1 45
# 7 7 56 [20,70) 1 45
# 8 8 59 [20,70) 1 45
# 9 9 64 [20,70) 1 45
#10 10 68 [20,70) 1 45
# # ... with 17 more rows


您可以删除任何不必要的列。我将它们留在这里只是为了更容易理解该过程的工作原理。

关于r - 使用计算的标签从groupby创建一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52318757/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com