消除 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
我想知道是否可以删除 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