2016-10-04 13 views
6

Ben Bir örnek data.table

library(data.table) 
set.seed(1) 
siz <- 10 
my <- data.table(
    AA=c(rep(NA,siz-1),"11/11/2001"), 
    BB=sample(c("wrong", "11/11/2001"),siz, prob=c(1000000,1), replace=T), 
    CC=sample(siz), 
    DD=rep("11/11/2001",siz), 
    EE=rep("HELLO", siz) 
) 

my[2,AA:=1] 


     NA wrong 3 11/11/2001 HELLO 
      1 wrong 2 11/11/2001 HELLO 
     NA wrong 6 11/11/2001 HELLO 
     NA wrong 10 11/11/2001 HELLO 
     NA wrong 5 11/11/2001 HELLO 
     NA wrong 7 11/11/2001 HELLO 
     NA wrong 8 11/11/2001 HELLO 
     NA wrong 4 11/11/2001 HELLO 
     NA wrong 1 11/11/2001 HELLO 
11/11/2001 wrong 9 11/11/2001 HELLO 

oluşturduk.

  AA BB CC DD EE 
[1,] FALSE FALSE FALSE TRUE FALSE 
[2,] FALSE FALSE FALSE TRUE FALSE 
[3,] FALSE FALSE FALSE TRUE FALSE 
[4,] FALSE FALSE FALSE TRUE FALSE 
[5,] FALSE FALSE FALSE TRUE FALSE 
[6,] FALSE FALSE FALSE TRUE FALSE 
[7,] FALSE FALSE FALSE TRUE FALSE 
[8,] FALSE FALSE FALSE TRUE FALSE 
[9,] FALSE FALSE FALSE TRUE FALSE 
[10,] TRUE FALSE FALSE TRUE FALSE 

Ama hiç böyle yaparsam:

AA BB CC DD EE 
1: NA FALSE FALSE FALSE FALSE 

Neden:

my[,lapply(.SD, grepl, patt)] 

Sadece bu sonuç almak? Köşeli parantez içinde aynı sonucu yazmak için aynı sonucu nasıl alabilirim? anonim işlev çağrısı kullanarak değilse

+0

patt

my[,lapply(.SD, grepl, pattern = patt)] 

Veya aksi - "^ \\ d \\ d ?/\\ d \\ d?/\\ d {4} $ " – skan

cevap

8

Biz pattern argüman belirtmek gerekir anonim bir işlev çağrısı

my[,lapply(.SD, function(x) grepl(patt, x))] 
+0

Denediğim başka bir şey benim [, grepl (patt, .SD)] oldu, ancak beklenen sonucu üretmiyor – skan

+1

@skan The'. SD' bir sütun listesidir. grepl, vektörler veya matris üzerinde çalışır – akrun