根据值创建包含虚拟对象的新列

时间:2018-01-09 09:37:20

标签: r tidyr

我想根据单个现有列的值创建新列。 它是事件数据(来自网站),因此值的数量不同。就像这样:

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包)。但是,我必须手动命名列(理想情况下,它应该采用值的名称,就像在示例中一样)。

1 个答案:

答案 0 :(得分:0)

我们可以在按table拆分并使用,

将其转换为data.frame后使用stack方法
table(stack(setNames(strsplit(df1$Event, ","), df1$row))[2:1])

数据

df1 <- structure(list(row = 1:4, 
 Events = c("237,2,236,102,106,111,114,115,116,117,118,119,125", 
 "237,111,116", "102,106,111,114,115", 
 "237,2,236,102,106,111,114,115,116,117,118,119,125, 126"
)), .Names = c("row", "Events"), class = "data.frame", row.names = c(NA, 
 -4L))