【问题标题】:Create new columns with dummies based on values [duplicate]根据值创建带有假人的新列[重复]
【发布时间】: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 或重复问题中的答案都没有使用这种方法),但不幸的是,他们将您的问题标记为重复。

标签: r tidyr


【解决方案1】:

我们可以使用table 的方法,在被, 分割并用stack 将其转换为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))

【讨论】:

  • 解决方案导致错误。我试图通过更改代码的最后一部分 [2:1] 来修复它,但这不起作用。 data.frame(values = unlist(unname(x)), ind, stringsAsFactors = FALSE) 中的错误:参数暗示不同的行数:969732, 0
  • @Roverflow 根据您的示例,它对我来说工作正常。我添加了我使用的示例的 dput 输出
  • 有效!奇怪的是,当我将表格转换为 data.frame.matrix() 或 as.data.frame() 时,列和行再次被打乱。
  • @Roverflow 你需要as.data.frame.matrix(table(stack(setNames(strsplit(df1$Event, ","), df1$row))[2:1]))
猜你喜欢
  • 1970-01-01
  • 2020-01-19
  • 1970-01-01
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-19
相关资源
最近更新 更多