2

2 つの列を持つデータ フレームがあります。最初の列は、データのサブセットを定義します。最初の列の 1 つのサブセットにのみ表示される 2 番目の列のすべての値を検索したいと考えています。

たとえば、次から:

df=data.frame(
  data_subsets=rep(LETTERS[1:2],each=5),
  data_values=c(1,2,3,4,5,2,3,4,6,7))

data_subsets data_values
      A           1
      A           2
      A           3
      A           4
      A           5
      B           2
      B           3
      B           4
      B           6
      B           7

次のデータフレームを抽出したいと思います。

data_subsets   data_values
    A              1
    A              5
    B              6
    B              7

私は遊んでいますがduplicated、それを機能させることができないようです。どんな助けでも大歓迎です。同様の問題に取り組んでいるトピックがたくさんあります。検索で答えを見逃さなかったことを願っています。

編集

要素の数を数えてデータ フレームから抽出するという @Matthew Lundberg のアプローチを変更しました。何らかの理由で、彼のアプローチは私が持っていたデータ フレームでは機能しなかったので、これを思いつきました。これはエレガントではありませんが、仕事は完了します。

counts=rowSums(do.call("rbind",tapply(df$data_subsets,df$data_values,FUN=table)))
extract=names(counts)[counts==1]
df[match(extract,df$data_values),]
4

4 に答える 4

5

まず、df$data_values の各要素の数を見つけます。

 x <- sapply(df$data_values, function(x) sum(as.numeric(df$data_values == x)))

> x
 [1] 1 2 2 2 1 2 2 2 1 1

行を抽出します。

> df[x==1,]
   data_subsets data_values
1             A           1
5             A           5
9             B           6
10            B           7

上記の「A 5」を見逃したことに注意してください。「B5」はありません。

于 2012-06-03T19:33:10.970 に答える
2

あなたは正しい考えを持っていましたduplicated。秘訣は、fromLast = TRUEfromLast = FALSEオプションを組み合わせて、重複していない行の完全なリストを取得することです。

!duplicated(df$data_values,fromLast = FALSE)&!duplicated(df$data_values,fromLast = TRUE)
 [1]  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE  TRUE

このベクターで data.frame にインデックスを付けると、次のようになります。

df[!duplicated(df$data_values,fromLast = FALSE)&!duplicated(df$data_values,fromLast = TRUE),]
   data_subsets data_values
1             A           1
5             A           5
9             B           6
10            B           7
于 2012-06-03T20:04:36.547 に答える
0

P Lapointeの答えの変形は次のようになります

df[! df$data_values %in% df[duplicated( unique(df)$data_values ), ]$data_values,]

は、データ内の一部の行が同一である可能性があり (テスト データではありません)、同じ行が個別の (または個別の他の列)に表示されないunique()場合は、それらを一度保持したいという可能性を扱います。data_valuesdata_sets

于 2012-06-03T23:07:55.607 に答える