【发布时间】:2018-12-27 16:04:51
【问题描述】:
我想用 dcast 更改我的 data.table 中的列,但我不希望它是二进制值 (0/1) 或不在级别中时
例如这个data.table:
dt1 <- data.table::data.table("ID" = 1:4,'Col0' = c(1, 0, 1, 0),'Col1' = c('a', 'b', 'c', 'a'),'Col2' = (letters[20:23]),'Col3' = factor(c("a", "b", NA, "a"),levels = c("a", "b", "c")))
我在尝试 dcast 之前添加了 ID,但我们可以移动这个值
我试过这个,但就像我在遇到关卡和二进制问题之前所描述的那样。
res = data.table::dcast(data.table::melt(dt1, id.vars='ID'), ID ~ variable + value, fun = length)
我试图得到这个结果。
result <- data.table::data.table('Col0' = c(1, 0, 1, 0),'Col1_a' = c(1, 0, 0, 1),'Col1_b' = c(0, 1, 0, 0),'Col1_c' = c(0, 0, 1, 0),'Col2_t' = c(1, 0, 0, 0),'Col2_u' = c(0, 1, 0, 0),'Col2_v' = c(0, 0, 1, 0),'Col2_w' = c(0, 0, 0, 1), 'Col3_a' = c(1, 0, NA, 1),'Col3_b' = c(0, 1, NA, 0))
【问题讨论】:
-
可以以
dummies::dummy.data.frame(dt1, names = colnames(dt1)[!sapply(dt1, is.numeric)], sep = "_")或fastDummies::dummy_cols(dt1)开头
标签: r