R优化数据表的grep

时间:2016-02-11 13:01:10

标签: r loops optimization grepl

我有一系列空的大数据表。它们看起来像这样(但更大,~6000列,1到100000行):

apple = c(NA, NA, NA)
orange = c(NA, NA, NA)
pear = c(NA, NA, NA)
demo <- data.table(apple, orange, pear)
row.names(demo) <- c("pineapples", "blood oranges", "grapes")

我正在进行模式匹配以查看行名是否包含列名,然后将相应的单元格标记为TRUE / FALSE。我写了一个运行良好的循环,但速度非常慢。

for(i in 1:ncol(demo)) {
    demo[, i] <- ifelse(grepl(colnames(demo)[i], 
                                      rownames(demo)), 
                                TRUE, 
                                FALSE)
}

有没有人有任何想法如何以更快的方式做到这一点?可以使用java,但我更愿意用纯R来解决它。

1 个答案:

答案 0 :(得分:3)

我们可以创建一个包含FALSE值的数据集,因为&#39; data.table&#39;中不允许row.names,创建这些名称的向量

rn <- c("pineapples", "blood oranges", "grapes")
for(j in seq_along(demo)){
    set(demo, i= grep(names(demo)[j], rn), j=j, value = TRUE)
   }

数据

 demo <- as.data.table(matrix(FALSE,3,3, 
    dimnames=list(NULL, c('apple', 'orange', 'pear'))))