例如,我的数据集如下:
Var1 Var2 value
1 ABC BCD 0.5
2 DEF CDE 0.3
3 CDE DEF 0.3
4 BCD ABC 0.5
unique
和duplicated
可能无法检测到第3行和第4行的重复。
由于我的数据集非常大,是否有任何有效的方法来仅保留唯一的行? 像这样:
Var1 Var2 value
1 ABC BCD 0.5
2 DEF CDE 0.3
为了说服,您可以使用:
dat <- data.frame(Var1 = c("ABC", "DEF", "CDE", "BCD"),
Var2 = c("BCD", "CDE", "DEF", "ABC"),
value = c(0.5, 0.3, 0.3, 0.5))
此外,如有可能,还可以根据Var1(超过10,000个级别)为前20个变量生成一个分布表。
P.S。我已经尝试过dat$count <- dat(as.character(dat$Var1))[as.character(dat$Var1)]
,但运行时间太长。
答案 0 :(得分:2)
另一种选择是按行对列Var1
和Var2
进行排序,然后应用duplicated
。
idx <- !duplicated(t(apply(dat[c("Var1", "Var2")], 1, sort)))
dat[idx, ]
# Var1 Var2 value
#1 ABC BCD 0.5
#2 DEF CDE 0.3
答案 1 :(得分:0)
我将从首先对value1和value2进行排序开始,然后使用unique
。如果只有两列,则只能使用pman
和pmin
:
dat <- data.frame(
Var1 = c("ABC", "DEF", "CDE", "BCD"),
Var2 = c("BCD", "CDE", "DEF", "ABC"),
value = c(0.5, 0.3, 0.3, 0.5))
library(dplyr)
dat %>% mutate(v1 = pmax(as.character(Var1), as.character(Var2)),
v2 = pmin(as.character(Var1), as.character(Var2))) %>%
select(v1, v2, value) %>% unique()
# v1 v2 value
# 1 BCD ABC 0.5
# 2 DEF CDE 0.3
但是,当您有更多列VarN
时,情况可能会有些复杂。