r-识别变量中所有项目中的通用文本

  • 本文关键字:文本 项目 识别 变量 r string
  • 更新时间 :
  • 英文 :


是否有一个函数可以在我的变量中查找公共文本?示例数据

V1 <- c("Age = 18-24", "Age = 25-34","Age = 35-44","Age = 45-54","Age = 55+")
V2 <- c("Social Grade A","Social Grade B","Social Grade D","Social Grade E","Social Grade F")
V3 <- c("How often do you do X? - 1 times","How often do you do X? - 2 times","How often do you do X? - 3 or more")

我正在处理数百个类似上面的文本变量。在每个变量中,它们的公共文本位于文本的左侧,唯一部分位于右侧。

是否有一个函数为V1识别";年龄=";是存在于所有项目中的公共文本,并且对于V2;社会等级";等

预期输出将相当于

V1_text <- "Age = "
V2_text <- "Social Grade "
V3_text <- "How often do you do X? - "

这里有一个循环,从最短字符串的末尾开始,检查所有条目是否匹配(即唯一值的长度为1(,从末尾去掉一个字母,直到匹配为止。

find_common_start <- function(strings) {
max_length = min(nchar(strings))
for(len in max_length:1) {
if(length(unique(substr(strings, start = 1, stop = len))) == 1) {
return(substr(strings[[1]], start = 1, stop = len))
}
}
}

结果

> find_common_start(V1)
[1] "Age = "
> find_common_start(V2)
[1] "Social Grade "
> find_common_start(V3)
[1] "How often do you do X? - "

我建议使用PTQXC包中的LCSn函数。

下面的代码说明:
我使用了tibble-包中的lst-函数,轻松地创建了一个输入数据(V1、V2…Vn(的命名列表。然后lapply()对该列表执行LCSn()-函数,并使用`list2env((
将结果列表的内容传递给全局环境(更改名称后,将覆盖源数据!(

library( PTXQC )
library( tibble )
L <- lapply( tibble::lst( V1, V2, V3 ), PTXQC::LCSn )
# $V1
# [1] "Age = "
# $V2
# [1] "Social Grade "
# $V3
# [1] "How often do you do X? - "
names(L) <- paste0( names(L), "_text")
list2env( L, .GlobalEnv )

最新更新