使用 R 中的标签从 df 自动创建变量

Automate variable creation from a df with labels in R

我正在尝试从代码和标签的单独 df 自动创建变量。

我有一个带有字符变量的数据框,该变量由 'JS123B071','JS3243C093' 等代码组成。此字符串中的代码没有逻辑顺序。在一个单独的数据框中,我有代码附带的标签,例如:'JS123B071', name1, 'JS3243C093', name2

我有的是:

id codelist
1 'JS123B071'
2 JS3243C093','JS123B071'
3 JS123B071' JS3243C093'

我想要的是:

id codelist name1 name2
1 'JS123B071' 1 0
2 'JS3243C093','JS123B071' 1 1
3 NA, NA, 'JS123B071', NA, 'JS3243C093' 1 1

所以我想根据字符串中特定代码的存在为每个标签创建一个新变量。我为此使用以下代码:

vec <- 'JS123B071'
df$name1 <- grepl(vec, df$codelist, fixed = TRUE)
df$name1 <- as.numeric(df$name1)

vec2 <- 'JS3243C093'
df$name2 <- grepl(vec2, df$codelist, fixed = TRUE)
df$name2 <- as.numeric(df$name2)

但是,我现在手工挑选代码和标签。但由于我有数以千计的代码和标签,我想自动执行此过程。有没有办法用 for 循环来做到这一点?

您可以将要检查的值放在一个向量中,然后使用 sapply 来检查每个值 grepl

vec <- c('JS123B071', 'JS3243C093')
result <- cbind(df, sapply(vec, function(x) as.integer(grepl(x, df$codelist))))
result

#  id             codelist JS123B071 JS3243C093
#1  1            JS123B071         1          0
#2  2 JS3243C093,JS123B071         1          1
#3  3 JS123B071,JS3243C093         1          1