首页 文章

将功能转换为假人

提问于
浏览
0

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

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

    (因为我不能评论(不够点))

    使用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

    您可以使用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
    

相关问题