将非发生因素添加到 R 中的数据框

Add non occurent factors to data frame in R

我有一个包含因素和相应值的数据框,如下所示:

df <- data.frame(week = factor(c(1,2,49,50)), occurrences = c(1,4,2,3))


 week occurrences
1    1          1
2    2          4
3   49          2
4   50          3

我想为 (1-53) 中所有“缺失的”周添加因子,相应的出现次数值为 0。执行此操作的最佳方法是什么?我必须对几个可能不会“丢失”相同因素的数据帧执行此操作,因此我想将其概括为一个函数。

这是 tidyr::complete 的方法。首先,我们需要将其他级别添加到 week 列。我们可以使用 forcats::fct_expand。然后 tidyr::complete 将用这些级别填充 data.frame,我们可以使用 fill = 参数来指示我们想要 0.

library(tidyverse)
df %>%
  mutate(week = fct_expand(week,paste0(1:52))) %>%
  complete(week, fill = list(occurrences = 0))
# A tibble: 52 x 2
   week  occurrences
   <fct>       <dbl>
 1 1               1
 2 2               4
 3 49              2
 4 50              3
 5 3               0
 6 4               0
 7 5               0
 8 6               0
 9 7               0
10 8               0
# … with 42 more rows

或者右连接到包含所有周的 data.frame:

library(dplyr)
df %>% 
   right_join(data.frame(week = as.factor(1:52))) %>%
    mutate(occurrences = replace_na(occurrences,0))

您可以使用 rbind() 将必要的行附加到您的 df,在本例中,为了清楚起见,我首先创建要添加的 df,然后再附加它。 setdiff() 将 return 当前不在您的周列中的数字:

df_to_app = data.frame(week = factor(setdiff(1:52, df$week)), occurrences = 0)
df = rbind(df, df_to_app)

希望对您有所帮助!