5

この質問に適したタイトルが見つかりませんので、お気軽に編集してください。

私はこのdata.frameを持っています

  section time to from
1       a    9  1    2
2       a    9  2    1
3       a   12  2    3
4       a   12  2    4
5       a   12  3    2
6       a   12  3    4
7       a   12  4    2
8       a   12  4    3

to2つの列の順列を計算せずに、同じで同時に重複する行を削除したいと思いfromます。たとえば、(1,2)と(2,1)が重複しています。

したがって、最終的な出力は次のようになります。

  section time to from
1       a    9  1    2
3       a   12  2    3
4       a   12  2    4
6       a   12  3    4

新しい列キーを作成することで解決策があります。

  key <- paste(min(to,from),max(to,from))

を使用して重複したキーを削除しduplicatedますが、これは汚い解決策だと思います。

ここに私のデータのdput

structure(list(section = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L), .Label = "a", class = "factor"), time = c(9L, 9L, 12L, 
12L, 12L, 12L, 12L, 12L), to = c(1L, 2L, 2L, 2L, 3L, 3L, 4L, 
4L), from = c(2L, 1L, 3L, 4L, 2L, 4L, 2L, 3L)), .Names = c("section", 
"time", "to", "from"), row.names = c(NA, -8L), class = "data.frame")
4

2 に答える 2

4
mn <- pmin(s$to, s$from)
mx <- pmax(s$to, s$from)
int <- as.numeric(interaction(mn, mx))
s[match(unique(int), int),]
  section time to from
1       a    9  1    2
3       a   12  2    3
4       a   12  2    4
6       a   12  3    4

アイデアの功績は、この質問に 当てはまります。データフレームから連続した重複を削除し、具体的には @MatthewPlourde の回答です。

于 2012-12-29T04:04:06.010 に答える
4

関数sort内で使用して、組み合わせを並べ替えることができます。apply

mydf[!duplicated(t(apply(mydf[3:4], 1, sort))), ]
#   section time to from
# 1       a    9  1    2
# 3       a   12  2    3
# 4       a   12  2    4
# 6       a   12  3    4
于 2012-12-29T04:12:25.853 に答える