将非发生因素添加到 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)
希望对您有所帮助!
我有一个包含因素和相应值的数据框,如下所示:
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)
希望对您有所帮助!