【问题标题】:How to run a function inside data.table?如何在 data.table 中运行函数?
【发布时间】:2016-10-04 11:52:03
【问题描述】:

我创建了一个示例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

如果我运行这段代码

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

但如果我这样做:

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

我刚刚得到这个结果:

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

为什么? 如何在括号内写 wverything 得到相同的结果?

【问题讨论】:

  • 帕特

标签: r data.table grepl


【解决方案1】:

如果我们不使用匿名函数调用,我们需要指定pattern 参数

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

或者以其他方式使用匿名函数调用

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

【讨论】:

  • 我尝试的另一件事是 my[, grepl(patt, .SD)] 但它没有产生预期的结果
  • @skan .SD 是一个列列表。 grepl 适用于向量或矩阵
猜你喜欢
  • 1970-01-01
  • 2012-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多