在 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
可以提供更多详细信息。
我有一个包含 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
可以提供更多详细信息。