我有这个df
df = data.frame(ID = rep(1:3,each=5), group = c('A','B','A','A','C','B','D','C','B','A','A','B','B','A','C') )
并且我希望创建哑变量列A、B、C和D,其结果是如果存在值A,则即使对于ID号1存在许多值A,我们也使值为1。所需输出如下所示
ID A B C D 1 1 1 1 1 0 2 2 1 1 1 1 3 3 1 1 1 0
kadbb4591#
+(as.data.frame.matrix(table(df)) > 0) # A B C D #1 1 1 1 0 #2 1 1 1 1 #3 1 1 1 0
或者使用pivot_wider:
pivot_wider
tidyr::pivot_wider(df, names_from = "group", values_from = "group", values_fn = ~ +(length(.x) > 0), values_fill = 0)
y53ybaqx2#
使用dcast
dcast
library(data.table) dcast(setDT(unique(df)), ID ~ group, length)
ID A B C D 1: 1 1 1 1 0 2: 2 1 1 1 1 3: 3 1 1 1 0
2条答案
按热度按时间kadbb4591#
或者使用
pivot_wider
:y53ybaqx2#
使用
dcast