【发布时间】:2023-03-14 02:10:01
【问题描述】:
我不知道这两个函数在 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
不是我想要的;
但 unique() 到底在做什么?
感谢您的帮助。
【问题讨论】:
-
运行
!duplicated(dat$probe)和unique(dat$probe);您会看到一个给出了 T/F 值的向量,另一个给出了唯一值的列表。 -
我认为你的概念问题可以通过查看 unique(dat$prob) 与 !duplicated(dat$prob) 来解决。我认为 ?duplicated 和 ?unique 的每个帮助页面上的第一句话都是有益的阅读。
-
@BrandonBertelsen:是的,确实如此。 :)
-
谢谢;如果我理解得很好; unique 只返回唯一的探针并丢弃所有出现的多个探针,而重复的帮助我删除重复的。我对吗 ?那么为什么在简单的例子中不是这样呢?以及为什么这两个函数在结果 data.frame 中给出相同数量的行?
-
假设您的
$probe列包含数字。考虑:mydata$probe <- c(1,2,3,2,5,4,7,5,6) ;foo<- unique(mydata$probe)。如果你取结果,即c(1,2,3,5,4,7,6)并提取mydata[c(foo),],你会得到什么?
标签: r