通过将重复行分散到R中的列来创建“虚拟变量”

时间:2018-01-14 18:24:52

标签: r dplyr

提前感谢您的帮助。

在使用spread的{​​{1}}重复行上使用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))

非常感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

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