将列传播到单热编码模式中

Spread colum into one-hot encoded pattern

我有一个具有以下模式的数据框:

df <- tibble(ID = c(1, 1, 1, 2, 2), key = c("a", "b", "b", "c", "c"), value = c("k1", "k3", "k1", "k2", "k5"))
     ID key   value
  <dbl> <chr> <chr>
1     1 a     k1   
2     1 b     k3   
3     1 b     k1   
4     2 c     k2   
5     2 c     k5 

我需要的是对每个 ID,将 key 相等的行组合在一起,然后在所有可能的唯一值中以单热编码方式对 value 进行编码列 value。那就是我想要的s.th。喜欢

     ID key      k1    k2    k3    k5
  <dbl> <chr> <dbl> <dbl> <dbl> <dbl>
1     1 a         1     0     0     0
2     1 b         1     0     1     0
3     2 c         0     1     0     1

如果有帮助,我可以提供一个可能的值列表,例如 possible_values = c("k1", "k2", "k3", ...)

您可以调整 pivot_wider() 中的那些参数来实现它。

library(tidyr)

pivot_wider(df,
            names_from = value, names_sort = TRUE,
            values_from = value, values_fn = length, values_fill = 0)

# A tibble: 3 × 6
     ID key      k1    k2    k3    k5
  <dbl> <chr> <int> <int> <int> <int>
1     1 a         1     0     0     0
2     1 b         1     0     1     0
3     2 c         0     1     0     1