【问题标题】:Create 'dummy variables' by spreading duplicate rows into columns in R通过将重复的行分散到 R 中的列中来创建“虚拟变量”
【发布时间】:2018-06-23 11:30:48
【问题描述】:

提前感谢您的帮助。

有几个问题使用spread(从长到宽)与unite 重复行,例如this

我认为让我的问题与众不同的是需要输出虚拟变量。

我预计会有这样的输入:

df <- data.frame(id = c(1,1,2,3,4), fruit = c("apple","pear","apple","orange","apple"))

还有这样的输出:

output <- data.frame(id=c(1,2,3,4), apple = c(1,1,0,1), pear = c(1,0,0,0), orange = c(0,0,1,0))

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    使用tidyverse 可以添加新列,而不是使用spread

    library(tidyverse)
    
    df %>% mutate(i = 1) %>% spread(fruit, i, fill = 0)
    
    # result
      id apple orange pear
    1  1     1      0    1
    2  2     1      0    0
    3  3     0      1    0
    4  4     1      0    0
    

    【讨论】:

    • 谢谢。这条评论和@clemens 都是正确的。我应该更具体地说明我对 dplyr 的偏好。非常感谢!
    【解决方案2】:

    您可以使用data.table 包中的dcast()

    data.table::dcast(df, 
                      id ~ fruit, 
                      fun.aggregate = function(x) 1L,
                      fill = 0L)
    

    哪个会返回

      id apple orange pear
    1  1     1      0    1
    2  2     1      0    0
    3  3     0      1    0
    4  4     1      0    0
    

    【讨论】:

      猜你喜欢
      • 2017-05-31
      • 2015-08-17
      • 2022-01-17
      • 2017-08-01
      • 2021-12-15
      • 2023-03-14
      • 2023-03-24
      • 2015-08-17
      • 1970-01-01
      相关资源
      最近更新 更多