1

Rのこれら2つの関数の違いがわかりません。data.frameがあり、特定の列の重複した値に対応する行を削除したいと思います。

    Acc         Probe             Coord_homol
1   NR_004442.1 225541_at~122     391
2   NM_028059.2 241348_at~444     4642
3   NM_028059.2 241348_at~468     4666
4   NM_001114   212306_at~4357    5034
5   NM_010573.2 230472_at~402     1987
6   NM_029633.2 212306_at~4357    4289
7   NM_00108196 212306_at~4357    4292
8   NM_029891.2 205004_at~3421    2963
9   NM_029891.2 205004_at~3635    3173
10  NM_007892.2 221586_s_at~1356 1257
11  NR_036613.1 208672_s_at~829  1301
12  NR_036613.1 208673_s_at~1472 1854
13  NM_011078.3 212726_at~3872    5175
14  NM_011078.3 212726_at~3887    5190
15  NM_013915.3 207164_s_at~1523 2911

この場合、プローブは行6と同じであるため、行7を削除します(同じプローブを持つ行は連続している必要はありません)。

私は最初にunique()を試しましたが、後で重複していることがわかりました。ただし、次のコマンドの場合

dat[!duplicated(dat$probe),]

dat[unique(dat$probe),]

結果のdata.frameに同じ数の行を指定すると、結果は同じではありません。

次のような、もっと単純なケースを試してみました。

単純なdata.frame:

> dat
   probe val
1    aaa  10
2    bbb  12
3    ccc  45
4    ddd  32
5    aaa  42
6    eee  10
7    fff  13
8    ccc  85
9    aaa  75
10   ddd  64

!duplicated()の使用:それは私がやりたいことのようです。

dat[!duplicated(dat$probe),]

  probe val
1   aaa  10
2   bbb  12
3   ccc  45
4   ddd  32
6   eee  10
7   fff  13

unique()の使用:

dat[unique(dat$probe),]

私は得る:

 probe val
1   aaa  10
2   bbb  12
3   ccc  45
4   ddd  32
5   aaa  42
6   eee  10

私が欲しいものではありません。

しかし、正確にunique()は何をしているのでしょうか?

ご協力いただきありがとうございます。

4

1 に答える 1

3

uniqueは係数を返し、係数の数値レベルはラベルではなくインデックス作成に使用されています。

uni <- unique(dat$probe)
str(uni)
 Factor w/ 6 levels "aaa","bbb","ccc",..: 1 2 3 4 5 6

それはあなたがこれをしているようなものです:

nums <- as.numeric(unique(dat$probe))
dat[nums,]
  probe val
1   aaa  10
2   bbb  12
3   ccc  45
4   ddd  32
5   aaa  42
6   eee  10

uniqueこの場合、ファクターを入れているので、ファクターを返します。常に係数を返すとは限りません。たとえば、unique(as.character(dat$probe))文字を返します。

于 2012-11-07T17:42:43.090 に答える