使用R,我将表格分成两列,即变量和值。有多个变量,值表示长度。我想最后得到三个列:变量,固定的预定箱和每个变量的每个箱的频率。
示例数据:
原始表/数据框:
Var Value
a 509
a 1000
b 251
b 330
...
新表/数据框:
Var Bin Count
a 0-250 50
a 251-500 30
a 501-1000 1
b 0-250 80
b 251-500 55
b 501-1000 30
...
答案 0 :(得分:1)
令我惊讶的是,我没有找到一个重复的问题来搜索问题的标题。
因此,以下是在基础R,cut()
和dplyr
中使用data.table
的三种可能解决方案。
# pre-define break points of bins
breaks <- seq(0L, 1000L, by = 250L)
请注意,默认情况下cut()
会创建左开,右闭的时间间隔,例如,
250 < x <= 500
。
对于第一个间隔,参数include.lowest = TRUE
也强制左闭合间隔,例如,
0 <= x <= 250
这看起来与OP的预期产出一致。
with(DF, table(Var, cut(Value, breaks, include.lowest = TRUE)))
Var [0,250] (250,500] (500,750] (750,1e+03] a 0 0 1 1 b 1 2 0 0
library(dplyr)
DF %>%
group_by(Var, Bin = cut(Value, breaks, include.lowest = TRUE)) %>%
count()
# A tibble: 4 x 3 # Groups: Var, Bin [4] Var Bin n <chr> <fctr> <int> 1 a (500,750] 1 2 a (750,1e+03] 1 3 b [0,250] 1 4 b (250,500] 2
library(data.table)
setDT(DF)[, .N, by = .(Var, Bin = cut(Value, breaks, include.lowest = TRUE))]
Var Bin N 1: a (500,750] 1 2: a (750,1e+03] 1 3: b [0,250] 1 4: b (250,500] 2
library(data.table)
DF <- fread("Var Value
a 509
a 1000
b 0
b 251
b 330")