我想将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%。
我做错了什么以及如何得到我所期望的?感谢
答案 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