我有一个data.table
(以下为data
),有10列(C1, ..., C10
),我想删除重复的行。
我不小心使用了setkey(data,C1)
,所以现在当我运行unique(data)
时,我只会根据列C1
获得唯一的行,而我只想在与另一行相同的情况下删除一行所有列C1, ..., C10
上都有一个
有没有办法撤消setkey()
操作?我找到了this question,但它没有帮助解决我的问题。
PS:我可以通过将data.table
中的所有列设置为setkeyv(data, paste0("C", 1:10))
的键来解决问题,但这根本不是一个优雅/实用的解决方案。
答案 0 :(得分:11)
首先,您可以使用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
可以提供更多详细信息。