在 R 中撤消 data.table 上的 setkey()

Undo setkey() on data.table in R

我有一个包含 10 列 (C1, ..., C10) 的 data.table(下面的 data),我想删除重复的行。

我不小心使用了 setkey(data,C1),所以现在当我 运行 unique(data) 时,我只得到基于列 C1 的唯一行,而我想删除一行仅当它与所有列中的另一个相同时 C1, ..., C10.
有没有办法撤消 setkey() 操作?我找到了 this question 但它并没有帮助解决我的问题。

PS:我可以通过将 data.table 中的所有列设置为带有 setkeyv(data, paste0("C", 1:10)) 的键来解决这个问题,但这根本不是 elegant/practical 解决方案.

首先,您可以使用setkey(data, NULL)删除密钥。

其次,unique.data.table 有一个 by 选项,允许您即时指定要使用哪些列进行比较(无论当前设置了哪个键):

unique(data, by = paste0("C", 1:10))

第三,不要对许多键使用setkey,而是使用setkeyv传递一个character向量:

setkeyv(data, paste0("C", 1:10))

通读 ?setkey?unique.data.table 可以提供更多详细信息。