我有以下数据框:
library(dplyr)
library(tibble)
df <- tibble(
source = c("a", "b", "b"),
day = c("D1", "D2", "D3"),
score = c(10, 5, 3) )
df
看起来像这样:
> df
# A tibble: 3 x 3
source day score
<chr> <chr> <dbl>
1 a D1 10
2 b D2 5
3 b D3 3
现在的价值观source
和day
不完整。的完整列表source
,并day
存储为载体:
complete_source <- c("a", "b","c")
complete_day <- c("D1", "D2" ,"D3", "D4")
我要做的是基于complete_source
和完成数据帧,并complete_day
用零(0)填充值。
所需的结果是(手工制作):
source day score
a D1 10
a D2 0
a D3 0
a D4 0
b D2 5
b D3 3
... etc ...
c D1 0
c D2 0
c D3 0
c D4 0
...etc
我该如何实现?
我们可以用 complete
library(tidyr)
library(dplyr)
complete(df, source = complete_source, day = complete_day, fill = list(score = 0))
# A tibble: 12 x 3
# source day score
# <chr> <chr> <dbl>
# 1 a D1 10
# 2 a D2 0
# 3 a D3 0
# 4 a D4 0
# 5 b D1 0
# 6 b D2 5
# 7 b D3 3
# 8 b D4 0
# 9 c D1 0
#10 c D2 0
#11 c D3 0
#12 c D4 0
或crossing
使用vector
s做一个并加入
crossing(source = complete_source, day = complete_day) %>%
left_join(df) %>%
mutate(score = replace_na(score, 0))
在中base R
,可以使用expand.grid/merge
transform(merge(expand.grid(source = complete_source,
day = complete_day), df, all.x = TRUE),
score = replace(score, is.na(score), 0))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句