我无法弄清楚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
使用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
不是我想要的;
但是究竟是什么独特的()呢?
感谢您的帮助。
答案 0 :(得分: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))
将返回字符。