【发布时间】:2022-01-01 21:24:52
【问题描述】:
我想知道是否可以删除n1 字符向量中与f1 公式中的元素部分重叠的部分。
例如,在n1 中,我们看到"chyes"&"bmi:chyes" 与ch 中的ch 部分重叠。
因此在desired_output 中,我们想要删除其中的"ch" 部分。因为n1 中的其他元素要么与f1 中的元素完全重叠(例如bmi),要么在f1 中不存在(例如intrcpt),我们将它们保持不变。
我尝试了以下解决方案,但无法获得所需的输出。
是否可以在 BASE R 或 tidyvesrse 中获取我的 desired_output?
f1 <- yi~ bmi*ch
n1 <- c("intrcpt","bmi","chyes","bmi:chyes")
desired_output <- c("intrcpt","bmi","yes","bmi:yes")
### Current unsuccessful solution:
foo <- function(fmla, vec) {
v1 <- all.vars(fmla)
v2 <- setdiff(vec, v1)
v1 <- paste0('^', v1)
v3 <- sub(paste(v1, collapse = "|"), "", v2)
vec[vec %in% v2] <- v3
vec
}
### EXAMPLE OF USE:
foo(f1, n1)
# "intrcpt" "bmi" "chyes" "bmi:chyes"
【问题讨论】:
-
你不能单独拥有
yes。您必须确定 yes 来自的变量,即ch变量。除非你使用数值变量 -
你为什么要这样做?你的最终目标是什么?似乎这是一个中间过程。你最后想做什么?添加/删除条款??
-
最后你能给出产生
n1向量的数据吗? -
@Onyambu,这是一个可重现的编程问题。我很欣赏编程答案。
-
你的最终目标是什么?我看到你就公式提出了多个问题。你可能做错了什么。中间步骤可能是不必要的,毕竟可能不受欢迎。可能有一个功能可以将您所拥有的东西转变为最终目标,而无需您经历的步骤