Я читаю в огромном CSV-файле с fread
. Данные как-то неправильно отформатированы, и заголовок время от времени повторяется. Теперь я хочу удалить заголовки в файле, поэтому мне нужно искать строки, содержимое которых равно заголовку.
Я мог бы подумать о 2 решениях, ни одно из которых не является оптимальным:
- Вариант 1 предполагает, что все повторяющиеся строки без заголовка в других отношениях взаимно различны по крайней мере в одной позиции
- Вариант 2 очень многословен и потребует много написания
По сути, мне понадобится что-то вроде al oop с циклами во всех столбцах и сравнением их с заголовком.
Таким образом, все сводится к вопросу:
Как найти указанную c строку в таблице данных без жесткого кодирования фильтра?
код
library(data.table)
foo <- data.frame(a = c(1:2, "a", 1:2, "a"), b = c(letters[1:2], "b", letters[2:1], "b"),
stringsAsFactors = FALSE)
setDT(foo)
## option 1: use duplicates, assuming that each row is otherwise unique
foo[-(which(duplicated(rbind(as.list(names(foo)), foo))) - 1)]
## option 2: compare directly, but becomes very cumbersome with growing number of columns
foo[!(a == names(foo)[1] & b == names(foo)[2])]