将功能转换为假人

时间:2017-06-09 17:31:35

标签: r dataframe dummy-variable

我有一个如下所示的数据集:

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)

但我不认为这是我想要的。任何帮助将不胜感激!

2 个答案:

答案 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