r - 在 data.table 中查找与表头相同的行
问题描述
我正在阅读一个巨大的 csv 文件fread
。数据格式不正确,并且标题不时重复。我现在想删除文件中的标题,因此,我必须搜索内容等于标题的行。
我可以想到 2 个解决方案,但都不是最优的:
- 选项 1 假设所有非标题重复行至少在一个位置上相互不同
- 选项 2 非常冗长,需要大量写作
基本上我需要一种循环遍历所有列并将它们与标题进行比较。
因此,整个事情归结为一个问题:
如何在不硬编码过滤器的情况下找到数据表中的特定行?
代码
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])]
解决方案
反加入:
setkeyv(foo, names(foo)) # Reordes data though
foo[!list(names(foo))]
a b
1: 1 a
2: 1 b
3: 2 a
4: 2 b
不设置键:
nfoo <- names(foo)
foo[!setNames(as.list(nfoo), nfoo), on = nfoo]
推荐阅读
- windbg - ClrMd Execute "~*k" 返回带有 clr!DllUnregisterServerInternal 而不是正确值的堆栈跟踪
- python - 尝试使用 ExponentialSmoothing 进行预测时出现 ConvergenceWarning
- javascript - 在 app.js 中出现此错误,尝试再次运行此代码,但得到相同的错误帮助我
- ruby-on-rails - 以视图形式访问嵌套参数
- r - 月份按倒序排列
- python - 如何在 Pandas DataFrame 中使用 groupby 条件然后 cumcount
- json - 检查 fetch_json 子中的 HTTP 代码/保存以前的输出以在 Perl 中备份
- python - How to build a model to predict a graph (not a image) in time series?
- python - python中具有灵活参数的函数
- r - Row sums for searching vector over data frame with conditions