重塑数据 - 这是 tidyr::spread 的操作吗?
Reshaping data - is this an operation for tidyr::spread?
我正在尝试重塑数据框,使列中的每个唯一值都成为二进制列。
我得到的数据如下所示:
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)
失败,因为 ID 重复。
我想重塑数据以促进建模 - 我正在尝试根据特征的存在与否来预测价值。
正如我之前的评论:
你必须使用reshape2
包的dcast
,因为spread
对处理过的数据效果很好and/or符合整洁数据原则。您的 "spreading" 有点不同(而且很复杂)。当然,除非您将 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
尽管如此,tidyr::spread
还是有一种方法可以做到这一点,即使用始终等于 1 的转换变量。
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
我正在尝试重塑数据框,使列中的每个唯一值都成为二进制列。
我得到的数据如下所示:
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)
失败,因为 ID 重复。
我想重塑数据以促进建模 - 我正在尝试根据特征的存在与否来预测价值。
正如我之前的评论:
你必须使用reshape2
包的dcast
,因为spread
对处理过的数据效果很好and/or符合整洁数据原则。您的 "spreading" 有点不同(而且很复杂)。当然,除非您将 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
尽管如此,tidyr::spread
还是有一种方法可以做到这一点,即使用始终等于 1 的转换变量。
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