【发布时间】:2018-01-09 09:37:20
【问题描述】:
我想根据单个现有列的值创建新列。 它是事件数据(来自网站),因此值的数量不同。就像这样:
row Events
1 237,2,236,102,106,111,114,115,116,117,118,119,125
2 237,111,116
3 102,106,111,114,115
4 237,2,236,102,106,111,114,115,116,117,118,119,125, 126
结果应该是虚拟数据,基于不同的值。
row 237 2 236 102 106 111 114 115 116 117 118 119 125 126
1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
2 1 0 0 0 0 1 0 0 1 0 0 0 0 0
3 0 0 0 1 1 1 1 1 0 0 0 0 0 0
4 0 0 0 1 1 1 1 1 0 0 0 0 0 1
我尝试使用 tidyr 单独函数以及函数“createDummyFeatures”(MLR 包)来解决这个问题。但是,我必须手动命名列(理想情况下,它应该采用值的名称,就像在示例中一样)。
【问题讨论】:
-
在链接的问题中使用 akrun 的答案,只需跳过
colnames部分和cbind与您原来的第一列。 -
在您的标签中使用
library(tidyr):mydf %>% mutate(Events = strsplit(as.character(Events), ",")) %>% unnest(Events) %>% distinct(.) %>% spread(Events,Events) %>% mutate_at(.vars=(-1),.funs=funs(if_else(is.na(.),0,1)))我想回答您(因为@akrun 或重复问题中的答案都没有使用这种方法),但不幸的是,他们将您的问题标记为重复。