gpt4 book ai didi

r - 在多列上使用 tidyr::complete

转载 作者:行者123 更新时间:2023-12-04 07:42:40 24 4
gpt4 key购买 nike

我几乎肯定我可以使用 tidyr::complete填写缺失的记录,但我无法通过使用 expand 使其正常工作或 nesting .我还没有找到任何非常有帮助的例子。我用过 complete对于单列,但从不多列。
我有一个数据集 group , subgroup , low_end , 和 high_end .高低为总是 5 分开。对于 group 的每一个可能的配对, subgroup , low_end + high_end组合,我需要在数据中至少有 1 条记录。并非 low_end 的所有可能组合和 high_end将在数据中(在这个 reprex 20/25 中)。

df <- data.frame(
group = c(rep('A', 2), rep('B', 2), rep('C', 1)),
subgroup = c(1,2,2,2,1),
low_end = c(5, 10, 10, 15, 25),
high_end = c(10, 15, 15, 20, 30),
value = c(rep(99, 5))
)
  group subgroup low_end high_end value
1 A 1 5 10 99
2 A 2 10 15 99
3 B 2 10 15 99
4 B 2 15 20 99
5 C 1 25 30 99
所需输出:
desired_result <- data.frame(
group = c(rep('A', 10), rep('B', 10), rep('C', 10)),
subgroup = c(rep(1, 5), rep(2, 5), rep(1, 5), rep(2, 5), rep(1, 5), rep(2, 5)),
low_end = c(rep(full_seq(x=c(5,25), 5), 6)),
high_end = c(rep(full_seq(x=c(10,30), 5), 6)),
value = c(99, rep(NA, 5), 99, rep(NA, 9), 99, 99, rep(NA, 6), 99, rep(NA, 5))
)
   group subgroup low_end high_end value
1 A 1 5 10 99
2 A 1 10 15 NA
3 A 1 15 20 NA
4 A 1 20 25 NA
5 A 1 25 30 NA
6 A 2 5 10 NA
7 A 2 10 15 99
8 A 2 15 20 NA
9 A 2 20 25 NA
10 A 2 25 30 NA
11 B 1 5 10 NA
12 B 1 10 15 NA
13 B 1 15 20 NA
14 B 1 20 25 NA
15 B 1 25 30 NA
16 B 2 5 10 NA
17 B 2 10 15 99
18 B 2 15 20 99
19 B 2 20 25 NA
20 B 2 25 30 NA
21 C 1 5 10 NA
22 C 1 10 15 NA
23 C 1 15 20 NA
24 C 1 20 25 NA
25 C 1 25 30 99
26 C 2 5 10 NA
27 C 2 10 15 NA
28 C 2 15 20 NA
29 C 2 20 25 NA
30 C 2 25 30 NA
文档说使用 expand包括数据中缺失的值,所以我认为它必须接近......
attempt <- df %>%
complete(expand(group, subgroup, low_end, high_end), fill= NA)
但同样,我显然在这里遗漏了一些重要的东西。

最佳答案

我们可以做 seqnesting

library(dplyr)
library(tidyr)
df %>%
complete(group, subgroup, nesting(low_end = seq(min(low_end),
max(low_end), by = 5),
high_end = seq(min(high_end), max(high_end), by = 5)))
-输出
# A tibble: 30 x 5
# group subgroup low_end high_end value
# <chr> <dbl> <dbl> <dbl> <dbl>
# 1 A 1 5 10 99
# 2 A 1 10 15 NA
# 3 A 1 15 20 NA
# 4 A 1 20 25 NA
# 5 A 1 25 30 NA
# 6 A 2 5 10 NA
# 7 A 2 10 15 99
# 8 A 2 15 20 NA
# 9 A 2 20 25 NA
#10 A 2 25 30 NA
# … with 20 more rows

关于r - 在多列上使用 tidyr::complete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67376772/

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