消除R中2个向量的部分重叠部分 [英] Eliminating partially overlapping parts of 2 vectors in R
本文介绍了消除R中2个向量的部分重叠部分的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想知道是否可以删除与f1
公式中的元素部分重叠的n1
字符向量中的部分。
例如,在n1
中,我们看到"study_typecompare"
&;"study_typecontrol"
与f1
中的study_type
部分重叠。
desired_output
中,我们希望删除其中的"study_type"
部分。因为其他元素(例如time_wk_whn
)在n1
中与f1
中的元素完全重叠,我们保留它们不变。
是否可以在baseR
或tidyvesrse中获取我的desired_output
?
f1 <- gi ~ 0 + study_type + time_wk_whn + time_wk_btw + items_whn +
items_btw + training_hr_whn + training_hr_btw
n1 <- c("study_typecompare","study_typecontrol","time_wk_whn",
"time_wk_btw","items_whn","items_btw","training_hr_whn",
"training_hr_btw")
desired_output <- c("compare","control", "time_wk_whn",
"time_wk_btw","items_whn","items_btw",
"training_hr_whn","training_hr_btw")
推荐答案
我们创建一个函数来分别传递公式和向量(‘fmla’,‘vec’)。从‘FMLA’(all.vars
)中提取变量,找到公式变量(setdiff
)中没有的向量中的值,通过paste
这些变量创建一个模式,并使用sub
替换为空(""
),然后更新‘vec’,返回更新后的向量
fun1 <- function(fmla, vec) {
v1 <- all.vars(fmla)
v2 <- setdiff(vec, v1)
v3 <- sub(paste(v1, collapse = "|"), "", v2)
vec[vec %in% v2] <- v3
vec
}
-正在检查
> identical(fun1(f1, n1), desired_output)
[1] TRUE
这篇关于消除R中2个向量的部分重叠部分的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文