重塑数据 - 这是tidyr :: spread的操作吗?

时间:2015-08-01 16:29:46

标签: r tidyr

我尝试重塑数据框,以便列中的每个唯一值都成为二进制列。

我已经提供了如下数据:

df <- data.frame(id = c(1,1,2),
                 value = c(200,200,1000),
                 feature = c("A","B","C"))

print(df)

##id,value,feature
##1,200,A
##1,200,B
##2,1000,C

我试图将其重塑为:

##trying to get here
##id,value,A,B,C
##1,200,1,1,0
##2,1000,0,0,1

spread(df,id,feature)失败,因为ids重复。

我想重塑数据以便于建模 - 我试图根据功能的存在与否预测价值。

2 个答案:

答案 0 :(得分:6)

有一种方法可以使用tidyr::spread,使用转换变量始终等于一。

library(dplyr)
library(tidyr)

mutate(df,v=1) %>%
  spread(feature,v,fill=0)

  id value A B C
1  1   200 1 1 0
2  2  1000 0 0 1

答案 1 :(得分:4)

正如我先前的评论: 您必须使用dcast包的reshape2,因为spread适用于已处理和/或与整洁数据原则一致的数据。你的“传播”有点不同(也很复杂)。当然,除非您将spread与其他功能结合使用。

library(reshape2)
dcast(df, id + value ~ ..., length)
  id value A B C
1  1   200 1 1 0
2  2  1000 0 0 1