Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 子集数据。表列独立_R_Data.table_Subset - Fatal编程技术网

R 子集数据。表列独立

R 子集数据。表列独立,r,data.table,subset,R,Data.table,Subset,我从下表dt开始,并尝试通过列表键将其列子集: library(data.table) set.seed(123) randomchar <- function(n, w){ chararray <- replicate(w, sample(c(letters, LETTERS), n, replace = TRUE)) apply(chararray, 1, paste0, collapse = "") } dt <- data.table(x = random

我从下表
dt
开始,并尝试通过列表
键将其列子集:

library(data.table)

set.seed(123)

randomchar <- function(n, w){
  chararray <- replicate(w, sample(c(letters, LETTERS), n, replace = TRUE))
  apply(chararray, 1, paste0, collapse = "")
}

dt <- data.table(x = randomchar(1000, 3),
                 y = randomchar(1000, 3),
                 z = randomchar(1000, 3),
                 key = c("x", "y", "z"))

keys <- with(dt, list(x = sample(x, 501),
              y = sample(y, 500),
              z = sample(z, 721)))
库(data.table)
种子集(123)

randomchar如何在该掩码上构建掩码和过滤器
dt

dt[Reduce(`&`, Map(function(key, col) col %in% key, keys, dt)),]

创建一个新的字段
key
,将所有三个键与
paste
连接起来并对其进行过滤怎么样?我想你的意思是使用
do.call(CJ,keys)
@Frank,可能吧-我刚刚尝试了一下,它就完成了,但两者都需要更长的时间,并且没有给出想要的结果。哦,对了。嗯,似乎
dt[do.call(CJ,keys),nomatch=0]
应该可以工作,但它也给出了错误的结果。。。我认为有一个FR可以使用键或索引进行复合测试,例如使用键或索引进行复合测试,如
a%in%as&b%in%bs
,但找不到。这里是:这个实现的速度大约是我的两倍副本需要很多时间,而这里只是过滤。
dt[Reduce(`&`, Map(function(key, col) col %in% key, keys, dt)),]