【发布时间】:2021-07-30 12:30:49
【问题描述】:
我正在尝试从单独的代码和标签 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 循环做到这一点?
【问题讨论】:
-
您的意思是在这种情况下您想要一个名为
df$name1的变量?可能是个坏主意,而是只使用一个列表:vars <- list(); vars[[df$name1]] <- vec等。 -
@dash2 感谢您的评论!如果代码存在于字符串中,我希望每个代码和每个观察值都为 1,否则为 0。为了以后能够解释新变量,我希望标签作为变量名。
-
如果您创建一个小的可重现示例以及预期的输出,这将更容易提供帮助。阅读how to give a reproducible example。
标签: r loops variables character