我有一个如下所示的数据集:
name ingredient allergic
prod1 ing1 yes
prod1 ing2 yes
prod2 ing1 no
prod2 ing3 no
prod3 ing3 yes
我想将成分变量转换为假人并格式化我的数据,使其看起来像:
name ing1 ing2 ing3 allergic
prod1 1 1 0 yes
prod2 1 0 1 no
prod3 0 0 1 yes
有没有人知道如何做到这一点?我能够使用
将我的变量转换为假人model.matrix(allergic ~ ingredient, data)
但我不认为这是我想要的。任何帮助将不胜感激!
答案 0 :(得分:1)
(因为我不能评论(不够点))
使用Robertmc创建的tibble,使用:
df <- df %>%
group_by(name,allergic) %>%
tidyr::spread( ingredient, value =dummy, fill = 0 )
这应该会给你发布的输出。
# A tibble: 3 x 5
name allergic ing1 ing2 ing3
* <chr> <chr> <dbl> <dbl> <dbl>
1 prod1 yes 1 1 0
2 prod2 no 1 0 1
3 prod3 yes 0 0 1
答案 1 :(得分:0)
您可以使用tidyverse软件包中的工具实现此目的:
df <- tibble::tibble(
name = c("prod1", "prod1", "prod2", "prod2", "prod3"),
ingredient = c("ing1", "ing2", "ing1", "ing3", "ing3"),
allergic = c("yes", "yes", "no", "no", "yes"),
dummy = 1)
tidyr::spread(df, ingredient, value = dummy, fill = 0, drop = FALSE) %>% slice(c(-1, -4, -5))
# A tibble: 3 x 5
name allergic ing1 ing2 ing3
<chr> <chr> <dbl> <dbl> <dbl>
1 prod1 yes 1 1 0
2 prod2 no 1 0 1
3 prod3 yes 0 0 1