R 是否有方法完成或扩展区间因子变量

R 是否有方法完成或扩展区间因子变量,r,tidyr,binning,R,Tidyr,Binning,我有一个数据帧/TIBLE,其中包括一个BIN因子变量。由于原始数据未包括这5年范围内的观察结果,因此缺少BIN。有没有一种方法可以轻松完成该系列而不必解构间隔 这是一个示例df library(tibble) df <- structure(list(bin = structure(c(1L, 3L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L), .Label = c("[1940,1945]&qu

我有一个数据帧/TIBLE,其中包括一个BIN因子变量。由于原始数据未包括这5年范围内的观察结果,因此缺少BIN。有没有一种方法可以轻松完成该系列而不必解构间隔

这是一个示例df

library(tibble)

df <- structure(list(bin = structure(c(1L, 3L, 5L, 6L, 7L, 8L, 9L, 
10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L), .Label = c("[1940,1945]", 
"(1945,1950]", "(1950,1955]", "(1955,1960]", "(1960,1965]", "(1965,1970]", 
"(1970,1975]", "(1975,1980]", "(1980,1985]", "(1985,1990]", "(1990,1995]", 
"(1995,2000]", "(2000,2005]", "(2005,2010]", "(2010,2015]", "(2015,2020]", 
"(2020,2025]"), class = "factor"), Values = c(2L, 4L, 14L, 11L, 
8L, 26L, 30L, 87L, 107L, 290L, 526L, 299L, 166L, 502L, 8L)), row.names = c(NA, 
-15L), class = c("tbl_df", "tbl", "data.frame"))

df
# A tibble: 15 x 2
   bin         Values
   <fct>        <int>
 1 [1940,1945]      2
 2 (1950,1955]      4
 3 (1960,1965]     14
 4 (1965,1970]     11
 5 (1970,1975]      8
 6 (1975,1980]     26
 7 (1980,1985]     30
 8 (1985,1990]     87
 9 (1990,1995]    107
10 (1995,2000]    290
11 (2000,2005]    526
12 (2005,2010]    299
13 (2010,2015]    166
14 (2015,2020]    502
15 (2020,2025]      8
库(TIBLE)
df
df%
变异(bin=切割宽度(年,宽度=5,中心=2.5))
df2%
分组依据(bin)%>%
汇总(值=n())%>%
解组()
TIBLE(bin=级别(df$bin))%>%
左联合(df2)%>%
替换_na(列表(值=0))

垃圾箱
已经具有您想要的
级别。因此,您可以在
df
中使用
complete
,如下所示:

tidyr::complete(df, bin = levels(bin), fill = list(Values = 0))

# A tibble: 17 x 2
#   bin         Values
#   <chr>        <dbl>
# 1 (1945,1950]      0
# 2 (1950,1955]      4
# 3 (1955,1960]      0
# 4 (1960,1965]     14
# 5 (1965,1970]     11
# 6 (1970,1975]      8
# 7 (1975,1980]     26
# 8 (1980,1985]     30
# 9 (1985,1990]     87
#10 (1990,1995]    107
#11 (1995,2000]    290
#12 (2000,2005]    526
#13 (2005,2010]    299
#14 (2010,2015]    166
#15 (2015,2020]    502
#16 (2020,2025]      8
#17 [1940,1945]      2
tidyr::完成(df,bin=级别(bin),fill=列表(值=0))
#一个tibble:17x2
#仓位值
#           
# 1 (1945,1950]      0
# 2 (1950,1955]      4
# 3 (1955,1960]      0
# 4 (1960,1965]     14
# 5 (1965,1970]     11
# 6 (1970,1975]      8
# 7 (1975,1980]     26
# 8 (1980,1985]     30
# 9 (1985,1990]     87
#10 (1990,1995]    107
#11 (1995,2000]    290
#12 (2000,2005]    526
#13 (2005,2010]    299
#14 (2010,2015]    166
#15 (2015,2020]    502
#16 (2020,2025]      8
#17 [1940,1945]      2

是的,这就是我添加最后一部分的原因。
剪切宽度
具有您想要的因子级别,我们只需要
完成它。
tidyr::complete(df, bin = levels(bin), fill = list(Values = 0))

# A tibble: 17 x 2
#   bin         Values
#   <chr>        <dbl>
# 1 (1945,1950]      0
# 2 (1950,1955]      4
# 3 (1955,1960]      0
# 4 (1960,1965]     14
# 5 (1965,1970]     11
# 6 (1970,1975]      8
# 7 (1975,1980]     26
# 8 (1980,1985]     30
# 9 (1985,1990]     87
#10 (1990,1995]    107
#11 (1995,2000]    290
#12 (2000,2005]    526
#13 (2005,2010]    299
#14 (2010,2015]    166
#15 (2015,2020]    502
#16 (2020,2025]      8
#17 [1940,1945]      2