如何做%喜欢%与字符串列表作为R中的参数?

时间:2017-10-26 19:04:31

标签: r string-comparison

我想将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]
}

这样,该函数甚至不会返回第一个元素的%like%。

我做错了什么以及如何得到我所期望的?感谢

1 个答案:

答案 0 :(得分:2)

您需要将单个字符串传递给%like%。使用带折叠的粘贴将矢量名称更改为用&#34; |&#34;分隔的字符串。使它成为正则表达式。像这样:

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