如何使用字符串列表作为 R 中的参数执行 %like%?
How to do %like% with a list of strings as parameter in R?
我想用函数 %like%:
比较 data.table 的列 "name" 和字符串列表中的一些名称
names <- ( "name1", "name2", "name3" )
specific_names <- data_table[name %like% names]
输出:
In grepl(pattern, vector) :
argument 'pattern' has length > 1 and only the first element will be used
但它确实适用于第一个元素,所以我做了一个循环来获取所有元素:
for(list_name in names){
specific_names <- data_table[name %like% list_name]
}
这样函数就不会 return 甚至是第一个元素的 %like%。
我做错了什么以及如何得到我所期望的?谢谢
您需要将单个字符串传递给 %like%。使用 paste with collapse 将向量名称更改为以“|”分隔的字符串使其成为正则表达式。像这样:
names <- c( "name1", "name2", "name3" )
data_table = data.table(name = rep(c( "name1", "name2", "name3", "name4" ),
each=3), y=c(1,3,6,7), v=1:12)
specific_names <- data_table[name %like% paste(names, collapse = "|")]
specific_names
## name y v
## 1: name1 1 1
## 2: name1 3 2
## 3: name1 6 3
## 4: name2 7 4
## 5: name2 1 5
## 6: name2 3 6
## 7: name3 6 7
## 8: name3 7 8
## 9: name3 1 9
我想用函数 %like%:
比较 data.table 的列 "name" 和字符串列表中的一些名称names <- ( "name1", "name2", "name3" )
specific_names <- data_table[name %like% names]
输出:
In grepl(pattern, vector) :
argument 'pattern' has length > 1 and only the first element will be used
但它确实适用于第一个元素,所以我做了一个循环来获取所有元素:
for(list_name in names){
specific_names <- data_table[name %like% list_name]
}
这样函数就不会 return 甚至是第一个元素的 %like%。
我做错了什么以及如何得到我所期望的?谢谢
您需要将单个字符串传递给 %like%。使用 paste with collapse 将向量名称更改为以“|”分隔的字符串使其成为正则表达式。像这样:
names <- c( "name1", "name2", "name3" )
data_table = data.table(name = rep(c( "name1", "name2", "name3", "name4" ),
each=3), y=c(1,3,6,7), v=1:12)
specific_names <- data_table[name %like% paste(names, collapse = "|")]
specific_names
## name y v
## 1: name1 1 1
## 2: name1 3 2
## 3: name1 6 3
## 4: name2 7 4
## 5: name2 1 5
## 6: name2 3 6
## 7: name3 6 7
## 8: name3 7 8
## 9: name3 1 9