2017-10-26 4 views
1

내가 %와 같은 기능 %로, 문자열 목록에 어떤 이름을 가진 data.table의 열 "이름"을 비교하려면 :R에서 매개 변수로 문자열 목록을 % like %하는 방법?

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] 
} 

합니다.

내가 뭘 잘못하고 어떻게하면 될까? 감사합니다

답변

2

% like %로 전달하려면 하나의 문자열이 필요합니다. 축소와 함께 붙여 넣기를 사용하여 벡터 이름을 "|"로 구분 된 문자열로 변경하십시오. 그것을 정규 표현식으로 만드십시오. 이와 같이 :

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 
+0

안녕하세요, 저는 3 행만했습니다. "data_table [% paste % (이름, 축소 ="| ")]"그리고 이미 감사했습니다. 하지만 두 번째 라인을 설명해 주시겠습니까? 나는 미래의 실수를 피하려고 그렇게해야합니까? –

+0

안녕하십니까 - 두 번째 줄에 예제 용 데이터 세트가 작성되었습니다. 예제를 정확하게 제공하지 않았기 때문입니다. –