R:将字符向量 (json) 中的整数转换为多个布尔列

R: convert integers in a character vector (json) to multiple boolean columns

我实际上有一个包含 2000 行(不同日期)的数据框,每行包含一个字符“向量”,其中包含 30 种不同技能的二进制信息。如果该技能已被使用,其编号将出现在向量中。但为了简化:
如果我有一个包含 10 种不同技能的 3 次观察(3 天)的数据框 - 名为 "S_total":
S_total= [1,3,7,8,9,10], [5,9], [],和一个变量 Day= 1,2,3 我想构建一个 3 行 12 列的数据框
列是:Day,S_total,,s1,s,2,s3,s4,s5,s6,s7,s8,s9,s10 其中编号变量的格式可以是 true/false

我想到了 as.numeric(read.csv) 的方向,然后 for 循环包含 cbind
但是必须有更好的方法吗?整洁的诗句?我希望有人演示:正则表达式和 Map-command

您可以使用 dataFrame$newColumndataFrame[, "newColum] 简单地添加一个新列。然后你可以使用 grepl 来测试是否在向量 dataFrame$S_total 中找到了技能。例如

dataFrame[, "1"] <- grepl("1", dataFrame$S_total)

要获得数据集中出现的所有不同技能,您可以将字符向量拆分为单个数字,然后使用 unique。然后你可以遍历所有不同的技能并为每个技能创建一个新列:

 > dataFrame <- data.frame(S_total = c(toString(c(1,3,7,8,11,20)),  toString(c(5,12)), ""),
    +                         Day = c(1,2,3),
    +                         stringsAsFactors = FALSE)
    > 
    > dataFrame
                 S_total Day
    1 1, 3, 7, 8, 11, 20   1
    2              5, 12   2
    3                      3
    > 
    > allSkill <- sort(unique(unlist(strsplit(dataFrame$S_total, ", "))))
    > for(i in allSkill){
    +   dataFrame[, i] <- grepl(i, dataFrame$S_total)
    + }
    > dataFrame
                 S_total Day     1    11    12    20     3     5     7     8
    1 1, 3, 7, 8, 11, 20   1  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE
    2              5, 12   2  TRUE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE
    3                      3 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

如果你的数据集不是那么大,这就可以了。如果你有一个非常大的集合并且性能很重要,你可以先创建空列然后循环遍历它们以提高性能 see.

我认为不需要使用地图或任何 tidyverse 包。

非常酷的解决方案,正是我所需要的。我只需要移除我的括号就可以让它工作。所以,假设我的向量 "S_total" 有括号,我必须:

S_total_nobracket <- gsub("\[|\]", "", S_total).

感谢一磨,您的回答。这正是我所需要的:-)