r - 将许多 Stata 替换转移到 R
问题描述
.
我有几千行 Stata 代码,通常旨在用来自同行的适当缺失值(将其保存为单列字符串。替换基本上如下所示,令人作呕:
replace R04_ADULTTYPE = . if (R04_ADULTTYPE <= -1 )
这些R04_
是数据集中的变量,所以我希望从本质上将这些 Stata 行有效地转移到 R 中。
我已经尝试过使用它并分离/替换以轻松迭代需要替换的变量列表,但我的想法很少。如果我以字符串数据集的形式使用它们,关于如何轻松地将这些替换整体转移到 R 的任何想法?我的预期输出基本上是在 R 中进行许多 Stata 替换,我在下面的数据中给出了这些替换。
数据头部的 Dput ( rawMissing
)。谢谢!
# Data (many Stata replaces
dput(head(rawMissing))
structure(list(replacements = c("replace R04_ADULTTYPE = . if (R04_ADULTTYPE <= -1 )",
"replace R04R_A_AT0047 = . if (R04R_A_AT0047 <= -1 )", "replace R04R_A_AM0069 = . if (R04R_A_AM0069 <= -1 )",
"replace R04R_A_AM0065_V2 = . if (R04R_A_AM0065_V2 <= -1 )",
"replace R04_AM0066 = . if (R04_AM0066 <= -1 )", "replace R04_AM0070 = . if (R04_AM0070 <= -1 )"
)), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"
))
# Expected output would be efficiently conducting these many replaces in R
解决方案
我们可以extract
将列名、运算符和要替换的值作为单独的列
library(dplyr)
library(tidyr)
keydat <- rawMissing %>%
extract(replacements, into = c('colnm', 'operator', 'value'),
'^[^(]+\\((\\w+)\\s+([[:punct:]]+)\\s+(-?[0-9]+)')
然后,使用上述数据,通过循环“keydat”中指定的列across
来循环原始数据集“df1 ”并执行这些操作across
replace
df2 <- df1 %>%
mutate(across(all_of(keydat$colnm), ~
{
op <- keydat$operator[match(cur_column(), keydat$colnm)]
val <- keydat$value[match(cur_column(), keydat$colnm)]
replace(., match.fun(op)(., val), NA)
}))
推荐阅读
- css - 如何使 Prestashop 元素居中
- android - 如何在没有直接导航链接的情况下在两个活动之间传递数据?
- javascript - 如何将字符串附加到循环中的字符串?
- android - 按钮阴影和文本,如 Android 上的 Apple App Store
- java - IE11 兼容模式下带有 Edge Chromium 的 Selenium
- c++ - 在我的代码中将数字从结构添加到变量
- reactjs - 如何立即查看 Redash 代码更改而不是每次都构建整个模块?
- gitlab-ci - 作业 URL 中的“-”是什么意思?
- java - Antlr4 在部分表达上没有失败
- javascript - 如何在reactjs中的点后始终显示2个小数点