2016-10-04 15 views
6

मैं एक उदाहरण बना लिया है data.tableडेटा.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 

अगर मैं इस कोड

patt <- "^\\d\\d?/\\d\\d?/\\d{4}$" 
sapply(my, function(x) (grepl(patt,x))) 

चलाने जब भी एक तारीख है मैं TRUE के साथ एक मेज मिलता है।

  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 

लेकिन अगर मैं इसे इस तरह कार्य करें:

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

क्यों:

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

मैं सिर्फ इस परिणाम मिलता है? ब्रैकेट के अंदर मुझे वही परिणाम लिखने के लिए कैसे मिल सकता है?

+0

patt <साथ - "^ \\ d \\ d ?/\\ डी \\ डी?/\\ डी {4} $ " – skan

उत्तर

8

हम अगर हम उपयोग नहीं कर रहे गुमनाम समारोह कॉल pattern तर्क निर्दिष्ट करने की आवश्यकता

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

या अन्यथा एक गुमनाम समारोह कॉल

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

मेरी एक और चीज मैंने कोशिश की थी [, grepl (patt, .SD)] लेकिन यह अपेक्षित परिणाम – skan

+1

@skan' उत्पन्न नहीं करता है। एसडी' कॉलम की एक सूची है। वैक्टर या मैट्रिक्स पर 'grepl' काम करता है – akrun

संबंधित मुद्दे