R中的两步数据框重新排列

Two step dataframe rearrange in R

我将 csv 导入到具有以下结构的数据框中:

id brand p_1 p_2 p_3 p_4 p_5 
1  A    1   2   5   
2  B    2   3 
3  C    3
4  B    1
5  A    2       

我想先把它放到这个结构中

p A B C
1 1 1 0
2 2 1 0
3 0 1 1  
4 0 0 0
5 1 0 0

所以它计算所有值的组合 但是 也计算不存在的值,例如 4 没有出现 YET 是 1(最小值)和 5(最大值)之间的值,这是棘手的部分!

谢谢!

df %>%
  pivot_longer(-(1:2)) %>%
  filter(!is.na(value)) %>%
  count(value, brand) %>%
  complete(value = 1:5, brand, fill = list(n=0)) %>%
  pivot_wider(names_from = brand, values_from = n, values_fill = 0)

结果

# A tibble: 5 × 4
  value     A     B     C
  <int> <int> <int> <int>
1     1     1     1     0
2     2     2     1     0
3     3     0     1     1
4     4     0     0     0
5     5     1     0     0

源数据

df <- data.frame(
    stringsAsFactors = FALSE,
                id = c(1L, 2L, 3L, 4L, 5L),
             brand = c("A", "B", "C", "B", "A"),
               p_1 = c(1L, 2L, 3L, 1L, 2L),
               p_2 = c(2L, 3L, NA, NA, NA),
               p_3 = c(5L, NA, NA, NA, NA),
               p_4 = c(NA, NA, NA, NA, NA),
               p_5 = c(NA, NA, NA, NA, NA)
)