R语言根据指定关键词对统计函数输出生成对应二元向量求助
该需求完全可以通过base R实现,无需引入第三方包,具体实现方案如下:
实现逻辑
- 第一步:从原始字符向量中剔除
intrcpt元素,得到待判断的特征项列表 - 第二步:对每个特征项分别按规则判断赋值:
- 不含
:的非交互项:只要包含provided向量中任意一个关键词,赋值为1 - 含
:的交互项:需要同时包含provided向量的两个关键词,才赋值为1
- 不含
- 其余不符合规则的情况统一赋值为0
可运行代码示例
# 示例输入 statistical_function = c("intrcpt","weekssome","weekshigh", "testeraware","weekssome:testeraware","weekshigh:testeraware") provided_vector = c("high", "aware") # 核心实现 # 1. 剔除截距项 terms <- statistical_function[statistical_function != "intrcpt"] # 2. 逐元素判断赋值 desired_vector <- sapply(terms, function(x) { # 判断是否为交互项 is_interaction <- grepl(":", x) if (!is_interaction) { # 非交互项匹配任意关键词即可 as.integer(any(grepl(provided_vector[1], x), grepl(provided_vector[2], x))) } else { # 交互项需同时匹配两个关键词 as.integer(all(grepl(provided_vector[1], x), grepl(provided_vector[2], x))) } }, USE.NAMES = FALSE) # 输出验证 desired_vector # 运行结果:[1] 0 1 1 0 1,与预期结果完全一致
通用封装函数
如果需要重复调用该逻辑,可以封装为自定义函数:
generate_binary_vector <- function(stat_vec, provided) { # 输入校验:要求provided为长度2的字符向量 stopifnot(is.character(provided), length(provided) == 2) # 剔除截距项 terms <- stat_vec[stat_vec != "intrcpt"] # 逐元素判断 sapply(terms, function(x) { if (!grepl(":", x)) { as.integer(any(grepl(provided[1], x), grepl(provided[2], x))) } else { as.integer(all(grepl(provided[1], x), grepl(provided[2], x))) } }, USE.NAMES = FALSE) } # 调用测试 generate_binary_vector(statistical_function, provided_vector)
内容的提问来源于stack exchange,提问作者rnorouzian
相关产品推荐
相关产品推荐

