グループごとに欠損値を補完するにはどうすればよいですか?
推奨事項とランクを含む df があり、少なくとも 4 つない場合はデフォルトの推奨事項を挿入する必要があります。
入力例:
library(tidyverse)
fixed_recomendations <- data.frame(recomendation_id = 50:54, name = paste("recomendation", 50:54, sep = "_"), stringsAsFactors = FALSE)
content_id <- c(1,1,2,rep(3, 6))
rank <- c(1, 2, 1, 1:6)
recomendation_id <- c(1:9)
name <- paste("recomendation", recomendation_id, sep = "_")
df <- data.frame(content_id, rank, recomendation_id, name, stringsAsFactors = FALSE)
# content_id rank recomendation_id name
# 1 1 1 recomendation_1
# 1 2 2 recomendation_2
# 2 1 3 recomendation_3
# 3 1 4 recomendation_4
# 3 2 5 recomendation_5
# 3 3 6 recomendation_6
# 3 4 7 recomendation_7
# 3 5 8 recomendation_8
# 3 6 9 recomendation_9
完全/塗りつぶしでやろうとしましたが、グループを尊重せず、ランク範囲外の値もカットします。
df %>%
complete(content_id, rank = 1:4,
fill = list(
recomendation_id = fixed_recomendations$recomendation_id,
name = fixed_recomendations$name
))
# content_id rank recomendation_id name
# 1 1 1 recomendation_1
# 1 2 2 recomendation_2
# 1 3 50 recomendation_50
# 1 4 51 recomendation_51
# 2 1 3 recomendation_3
# 2 2 52 recomendation_52
# 2 3 53 recomendation_53
# 2 4 54 recomendation_54
# 3 1 4 recomendation_4
# 3 2 5 recomendation_5
# 3 3 6 recomendation_6
# 3 4 7 recomendation_7
望ましい出力:
# content_id rank recomendation_id name
# 1 1 1 recomendation_1
# 1 2 2 recomendation_2
# 1 3 50 recomendation_50
# 1 4 51 recomendation_51
# 2 1 3 recomendation_3
# 2 2 50 recomendation_50
# 2 3 51 recomendation_51
# 2 4 52 recomendation_52
# 3 1 4 recomendation_4
# 3 2 5 recomendation_5
# 3 3 6 recomendation_6
# 3 4 7 recomendation_7
# 3 5 8 recomendation_8
# 3 6 9 recomendation_9