2017-03-20 5 views
1

私はデータテーブルの仕組みを学んでいて、TRUEを返さない行を削除するために2列(id1id2)にgrep()を使用しようとしています。grep()で行を削除し、data.tableでlapplyします

私は機能lapply()を使用する必要があります知っているが、それは常に、その後のエラーを返します。

argument 'pattern' has length > 1 and only the first element will be used 

私はこれを試してみました(と私はそれが間違っていることを知っている):

DT[, lapply(.SD, grepl(id1, id2)), by= id] 

私は「データ作業中:

structure(list(id = c(52L, 52L, 52L, 52L, 54L, 54L, 84L, 84L, 
87L, 87L, 129L, 129L, 130L, 130L, 130L), id1 = c("8113H187", 
"3505H6", "3505H6", "3505H6", "3505H6", "3505H6", "3505H6", "3505H6", 
"8113H187", "8113H187", "3505H6", "3505H6", "3505H6", "3505H6", 
"3505H6"), id2 = c("3505H6856", "3505H6856", "3505H6856", "3505H6856", 
"3505H67158", "3505H67158", "3505H63188", "3505H63188", "3505H64691", 
"3505H64691", "3505H664133", "3505H664133", "3505H658134", "3505H658134", 
"3505H658134")), .Names = c("id", "id1", "id2"), row.names = c(NA, 
-15L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x00000000064f0788>) 
+1

'grepl'パターン引数がベクトル化されていない「ID2」の要素にpatternとして「ID1」に対応する要素を比較することができません。 'library(stringi);のようなものを試してください。 DT [、stri_detect_fixed(id2、id1)] ' –

答えて

1
DT[mapply(grepl, id1, id2), ] 

#  id id1   id2 
# 1: 52 3505H6 3505H6856 
# 2: 52 3505H6 3505H6856 
# 3: 52 3505H6 3505H6856 
# 4: 54 3505H6 3505H67158 
# 5: 54 3505H6 3505H67158 
# 6: 84 3505H6 3505H63188 
# 7: 84 3505H6 3505H63188 
# 8: 129 3505H6 3505H664133 
# 9: 129 3505H6 3505H664133 
# 10: 130 3505H6 3505H658134 
# 11: 130 3505H6 3505H658134 
# 12: 130 3505H6 3505H658134 
1

を使用できます210は

DT[unlist(Map(grepl, id1, id2))] 
関連する問題