3 回答

TA貢獻1775條經驗 獲得超8個贊
有很多方法可以做到這一點,這是一種:
unique(t(apply(df, 1, sort)))
duplicated(t(apply(df, 1, sort)))
一個給出唯一的行,另一個給出掩碼。

TA貢獻1796條經驗 獲得超4個贊
如果只有兩列,則還可以使用pmin和pmax,如下所示:
library(data.table)
unique(as.data.table(df)[, c("V1", "V2") := list(pmin(V1, V2),
pmax(V1, V2))], by = c("V1", "V2"))
# V1 V2
# 1: a b
# 2: b d
# 3: c e
使用“ dplyr”的類似方法可能是:
library(dplyr)
data.frame(df, stringsAsFactors = FALSE) %>%
mutate(key = paste0(pmin(X1, X2), pmax(X1, X2), sep = "")) %>%
distinct(key)
# X1 X2 key
# 1 a b ab
# 2 b d bd
# 3 c e ce

TA貢獻2003條經驗 獲得超2個贊
如果所有元素都是字符串(哎呀,即使不是,也可以強迫它們),那么一個技巧就是將其創建為data.frame并在其中使用一些dplyr技巧。
library(dplyr)
df <- data.frame(v1 = c("a","b","c","b"), v2 = c("b","d","e","a"))
df$key <- apply(df, 1, function(s) paste0(sort(s), collapse=''))
head(df)
## v1 v2 key
## 1 a b ab
## 2 b d bd
## 3 c e ce
## 4 b a ab
該$key列現在應該告訴您重復。
df %>% group_by(key) %>% do(head(., n = 1))
## Source: local data frame [3 x 3]
## Groups: key
## v1 v2 key
## 1 a b ab
## 2 b d bd
## 3 c e ce
- 3 回答
- 0 關注
- 780 瀏覽
添加回答
舉報