1

我不知道R中这两个函数之间有什么区别。我有一个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

在这种情况下,我想删除第 7 行,因为探针与第 6 行相同(具有相同探针的行不必是连续的)。

我首先尝试了 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

使用唯一():

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 回答