首页 > 解决方案 > 将字符串匹配转换为二进制元素的向量

问题描述

感谢您对以下问题的建议包或基本 R 解决方案的帮助(在此先感谢您。)

想象一下,我有一个来自statistical_function下面)的字符元素向量。如果我提供两个字符元素的名称(例如,provided = c("high", "aware")),那么我需要一种机制来为我生成以下二进制向量:desired_vector = c(0,1,1,0,1).

长度:desired_vector与统计函数的输出中的元素数减去名为 的元素具有相同的长度intrcpt。因此,在这种情况下,desired_vector将有5元素。

元素 A:对于statistical_function' 的输出中不包含:(例如,"weekhigh")但确实包含provided向量元素之一("high")的每个元素,我想要的向量应该是1

元素 B:对于统计函数输出中确实包含:(例如"weekhigh:testeraware")和确实包含provided向量元素("high"& "aware")的每个元素,我想要的向量应该是1

desired_vector否则,应该是中的所有剩余元素0。这有可能在 R 中实现吗?

在下面的例子中,第一个元素 ofdesired_vector0因为intrcpt放在一边,weekssome不包含"high"or "aware",第二个元素是1因为weekshighhas "high",第三个元素是1因为"testeraware"contains "aware",第四个元素是0因为"weekssome:testeraware"不包含 BOTH "high"and "aware",第五个元素是1因为它确实包含和. "high"_"aware"

statistical_function = c("intrcpt","weekssome","weekshigh",            
"testeraware","weekssome:testeraware","weekshigh:testeraware")

# [1] "intrcpt"               "weekssome"             "weekshigh"            
# [4] "testeraware"           "weekssome:testeraware" "weekshigh:testeraware"

provided_vector = c("high", "aware")

desired_vector = c(0, 1, 1, 0, 1)

标签: rregexstringcharactertidyverse

解决方案


你可以试试下面的代码

+(
  abs(
    grepl(":", statistical_function) -
      rowSums(
        sapply(provided_vector, grepl, statistical_function)
      )
  ) == 1)[
  statistical_function != "intrcpt"
]

这使

[1] 0 1 1 0 1

推荐阅读