消除R中2个向量的部分重叠部分 [英] Eliminating partially overlapping parts of 2 vectors in R

查看:20
本文介绍了消除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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆