r - 将字符串匹配转换为二进制元素的向量
问题描述
感谢您对以下问题的建议包或基本 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_vector
是0
因为intrcpt
放在一边,weekssome
不包含"high"
or "aware"
,第二个元素是1
因为weekshigh
has "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)
解决方案
你可以试试下面的代码
+(
abs(
grepl(":", statistical_function) -
rowSums(
sapply(provided_vector, grepl, statistical_function)
)
) == 1)[
statistical_function != "intrcpt"
]
这使
[1] 0 1 1 0 1