消除 R 中 2 个向量的部分重叠部分

Eliminating partially overlapping parts of 2 vectors in R

我想知道是否可以删除 n1 字符向量中 部分与 中的元素重叠的部分f1公式。

例如,在 n1 中,我们看到 "study_typecompare" & "study_typecontrol"f1 中的 study_type 部分重叠。

因此在desired_output中,我们要删除其中的"study_type"部分。因为 n1 中的其他元素(例如 time_wk_whn)与 f1 中的元素完全重叠,我们保持它们不变。

是否可以在 BASE R 或 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'、return 更新向量

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