我有一系列空的大数据表。它们看起来像这样(但更大,~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来解决它。
答案 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'))))