如何根据列的最小值和最大值对列进行分箱
How to bin columns based on the minimum and maximum of a column
我有一个数据集,当我评分时需要将其从连续尺度转换为分类尺度。每个值将根据该列的最小值和最大值以 10 个间隔放入这些类别之一。因此,如果最小值 = 1,最大值 = 100,则将有 10 个类别,因此 1-10 = 1、11-20 = 2、21-30 = 3、...、91-100 = 10 中的任何值。这是我的数据
df <- as.data.frame(cbind(test1 = sample(13:52, 15),
test2 = sample(16:131, 15)))
> df
test1 test2
1 44 131
2 26 83
3 74 41
4 6 73
5 83 20
6 63 110
7 23 29
8 42 64
9 41 40
10 10 96
11 2 39
12 14 24
13 67 30
14 51 59
15 66 37
到目前为止我有一个函数:
trail.bin <- function(data, col, min, max) {
for(i in 1:10) {
for(e in 0:9) {
x <- as.data.table(data)
mult <- (max - min)/10
x[col >= min+(e*mult) & col < min+(i*mult),
col := i]
}
}
return(x)
}
我想做的是取最小值和最大值,找到间隔的间距(mult),然后在 data.table 参考语法上使用两个循环。我希望的结果是:
df2
test1 test2
1 5 131
2 3 83
3 8 41
4 1 73
5 9 20
6 7 110
7 3 29
8 5 64
9 5 40
10 2 96
11 1 39
12 2 24
13 7 30
14 6 59
15 7 37
谢谢!
您可以使用 cut
创建函数
library(data.table)
trail.bin <- function(data, col, n) {
data[, (col) := lapply(.SD, cut, n, labels = FALSE), .SDcols = col]
return(data)
}
setDT(df)
trail.bin(df, 'test1', 10)
你也可以传递多列
trail.bin(df, c('test1', 'test2'), 10)
我有一个数据集,当我评分时需要将其从连续尺度转换为分类尺度。每个值将根据该列的最小值和最大值以 10 个间隔放入这些类别之一。因此,如果最小值 = 1,最大值 = 100,则将有 10 个类别,因此 1-10 = 1、11-20 = 2、21-30 = 3、...、91-100 = 10 中的任何值。这是我的数据
df <- as.data.frame(cbind(test1 = sample(13:52, 15),
test2 = sample(16:131, 15)))
> df
test1 test2
1 44 131
2 26 83
3 74 41
4 6 73
5 83 20
6 63 110
7 23 29
8 42 64
9 41 40
10 10 96
11 2 39
12 14 24
13 67 30
14 51 59
15 66 37
到目前为止我有一个函数:
trail.bin <- function(data, col, min, max) {
for(i in 1:10) {
for(e in 0:9) {
x <- as.data.table(data)
mult <- (max - min)/10
x[col >= min+(e*mult) & col < min+(i*mult),
col := i]
}
}
return(x)
}
我想做的是取最小值和最大值,找到间隔的间距(mult),然后在 data.table 参考语法上使用两个循环。我希望的结果是:
df2
test1 test2
1 5 131
2 3 83
3 8 41
4 1 73
5 9 20
6 7 110
7 3 29
8 5 64
9 5 40
10 2 96
11 1 39
12 2 24
13 7 30
14 6 59
15 7 37
谢谢!
您可以使用 cut
library(data.table)
trail.bin <- function(data, col, n) {
data[, (col) := lapply(.SD, cut, n, labels = FALSE), .SDcols = col]
return(data)
}
setDT(df)
trail.bin(df, 'test1', 10)
你也可以传递多列
trail.bin(df, c('test1', 'test2'), 10)