gpt4 book ai didi

r - dplyr - 检查月份是否存在,如果没有,则用 NA 添加它

转载 作者:行者123 更新时间:2023-12-02 09:13:27 25 4
gpt4 key购买 nike

关闭但不重复:Proper idiom for adding zero count rows in tidyr/dplyr - 我试图根据 df 中的现有值进行填充,但也根据没有 id 的数据进行填充。相似,但本质不同。

对于每个 id,我试图确保每个 ID 都有 3 个计费月份。

理想情况下,对于每个id,我需要所有三个所需月份都出现在df_complete中。如果数据中没有,我希望为值添加一行“未找到”。

此外,我想检查 all_ids 并添加 all_ids 中但在 df 中没有行的 id

months <- as.data.frame(as.Date(c("2016/7/1","2016/9/1","2016/7/1", "2016/8/1","2016/9/1", "2016/8/1","2016/9/1"))) 
id <- as.data.frame(c("a","a","b","b","b","c","c"))
value <- as.data.frame(c(1,2,3,4,5,6,7))
df <- cbind(id,months,value)
colnames(df) <- c("id","billing months","value")
required_months <- as.data.frame(as.Date(c("2016/7/1", "2016/8/1","2016/9/1")))
colnames(required_months)<- "required months"
all_ids <- as.data.frame(c("a","b", "c", "d"))

df 最终看起来像:

id  billing months  value
a 7/1/2016 1
a 9/1/2016 2
b 7/1/2016 3
b 8/1/2016 4
b 9/1/2016 5
c 8/1/2016 6
c 9/1/2016 7

我正在寻找什么(df_complete):

id  billing months  value
a 7/1/2016 1
a 8/1/2016 Not Found
a 9/1/2016 2
b 7/1/2016 3
b 8/1/2016 4
b 9/1/2016 5
c 7/1/2016 Not Found
c 8/1/2016 6
c 9/1/2016 7
d 7/1/2016 Not Found
d 8/1/2016 Not Found
d 9/1/2016 Not Found

正在寻找dplyr解决方案,但其他软件包也可以工作。

最佳答案

这看起来像是 tidyr::complete 的工作。由于原始数据集中缺少 id 变量和月份,因此您需要通过 complete 定义需要填写的值。您可以使用 fill 定义您想要输入的缺失值(尽管您的 Not find 值会将您的列从可能是数字的列更改为一列字符)。

suppressPackageStartupMessages( library(dplyr) )
library(tidyr)

df %>%
complete(id = c("a","b", "c", "d"),
`billing months` = required_months$`required months`,
fill = list(value = "Not found") )

#> Warning: Column `id` joining character vector and factor, coercing into
#> character vector

#> # A tibble: 12 x 3
#> id `billing months` value
#> <chr> <date> <chr>
#> 1 a 2016-07-01 1
#> 2 a 2016-08-01 Not found
#> 3 a 2016-09-01 2
#> 4 b 2016-07-01 3
#> 5 b 2016-08-01 4
#> 6 b 2016-09-01 5
#> 7 c 2016-07-01 Not found
#> 8 c 2016-08-01 6
#> 9 c 2016-09-01 7
#> 10 d 2016-07-01 Not found
#> 11 d 2016-08-01 Not found
#> 12 d 2016-09-01 Not found

reprex package于2018年3月29日创建(v0.2.0)。

关于r - dplyr - 检查月份是否存在,如果没有,则用 NA 添加它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49560118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com