У меня есть серия пустых больших таблиц данных. Они выглядят так (но намного больше, ~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")
Я выполняю сопоставление с образцом, чтобы увидеть, содержат ли имена строк имена столбцов, а затем помечаю соответствующие ячейки как ИСТИНА/ЛОЖЬ. У меня есть написанный цикл, который работает хорошо, но очень медленно.
for(i in 1:ncol(demo)) {
demo[, i] <- ifelse(grepl(colnames(demo)[i],
rownames(demo)),
TRUE,
FALSE)
}
У кого-нибудь есть идеи, как это сделать быстрее? Можно было бы использовать java, но я бы предпочел решить ее на чистом R.
demo
? Дляdata.table
вы не можете назначить имя строки. - person akrun   schedule 11.02.2016outer
иstringi
, например,outer(row.names(demo), colnames(demo), stringi::stri_detect_fixed)
- person David Arenburg   schedule 11.02.2016data.table
s. Хотя лучше создать столбец Id предположения. - person David Arenburg   schedule 11.02.2016ifelse
здесь, вы можете сделатьfor(i in 1:ncol(demo)) demo[, i] <- grepl(colnames(demo)[i], rownames(demo), fixed = TRUE)
(обратите внимание наfixed = TRUE
для эффективности) - person David Arenburg   schedule 11.02.2016