2011-05-19 86 views
2
过滤数据集

可能重复:
R: Finding patterns across multiple columns- possibly duplicated()?R:基于唯一列

亲爱的朋友们,

这里是我的数据集的一部分:

  name chr  start  stop strand alias 
60 uc003vqx.2 chr7 130835560 130891916  - PODXL 
61 uc003xlp.1 chr8 38387812 38445509  -  FLG 
62 uc003xlu.1 chr8 38400008 38445509  -  FLG 
63 uc003xlv.1 chr8 38400008 38445509  -  FLG 
64 uc003xtz.1 chr8 61263976 61356508  -  CA8 
65 uc003xua.1 chr8 61283183 61356508  -  CA8 
66 uc010lwg.1 chr8 38387812 38445509  -  FLG 
67 uc010lwh.1 chr8 38387812 38445509  -  FLG 
68 uc010lwj.1 chr8 38387812 38445509  -  FLG 

我想fil ter数据集基于独特的开始,停止和别名列。最终结果必须是这样的:

  name chr  start  stop strand alias 
60 uc003vqx.2 chr7 130835560 130891916  - PODXL 
61 uc003xlp.1 chr8 38387812 38445509  -  FLG 
62 uc003xlu.1 chr8 38400008 38445509  -  FLG 
64 uc003xtz.1 chr8 61263976 61356508  -  CA8 
65 uc003xua.1 chr8 61283183 61356508  -  CA8 
66 uc010lwg.1 chr8 38387812 38445509  -  FLG 

有谁知道是否有解决方案吗? 谢谢!

+0

如果我没有弄错,你的d所希望的结果包含重复的行(即, 66是一样的62) – Andrie 2011-05-19 13:49:32

+0

还:http://stackoverflow.com/questions/2626567/collapsing-data-frame-by-selecing-one-row-per-group或http://stackoverflow.com/questions/1769365/how-to-remove-partial-duplicates-from-a-data-frame,or http://stackoverflow.com/questions/2183002/display-only-one-line-for-each-na-value使用SO的搜索功能不会造成伤害。 – 2011-05-19 14:37:44

回答

7

使用duplicated功能:

复制数据:

x <- "   name chr  start  stop strand alias 
60 uc003vqx.2 chr7 130835560 130891916  - PODXL 
61 uc003xlp.1 chr8 38387812 38445509  -  FLG 
62 uc003xlu.1 chr8 38400008 38445509  -  FLG 
63 uc003xlv.1 chr8 38400008 38445509  -  FLG 
64 uc003xtz.1 chr8 61263976 61356508  -  CA8 
65 uc003xua.1 chr8 61283183 61356508  -  CA8 
66 uc010lwg.1 chr8 38387812 38445509  -  FLG 
67 uc010lwh.1 chr8 38387812 38445509  -  FLG 
68 uc010lwj.1 chr8 38387812 38445509  -  FLG" 

dat <- read.table(textConnection(x), header=TRUE) 

删除重复:

dat[!duplicated(dat[, c("start", "stop", "alias")]), ] 

     name chr  start  stop strand alias 
60 uc003vqx.2 chr7 130835560 130891916  - PODXL 
61 uc003xlp.1 chr8 38387812 38445509  - FLG 
62 uc003xlu.1 chr8 38400008 38445509  - FLG 
64 uc003xtz.1 chr8 61263976 61356508  - CA8 
65 uc003xua.1 chr8 61283183 61356508  - CA8 
+2

我之前使用过重复函数,但我不知道这也是可能的。谢谢! – Lisann 2011-05-19 13:53:20

+1

我也没有。谢谢 – 2011-05-19 13:55:26

1

我想你的示例输出是错误的,尝试

dfrm$comb <- with(dfrm, paste(start,stop, alias, sep="+")) 
dfrm[!duplicated(dfrm$comb), 1:6] 
#--- 
     name chr  start  stop strand alias 
60 uc003vqx.2 chr7 130835560 130891916  - PODXL 
61 uc003xlp.1 chr8 38387812 38445509  - FLG 
62 uc003xlu.1 chr8 38400008 38445509  - FLG 
64 uc003xtz.1 chr8 61263976 61356508  - CA8 
65 uc003xua.1 chr8 61283183 61356508  - CA8 
+0

尽管这是一个实用的解决方案(我曾经在可怕的Excel中使用过很多次),但应该可以在假设数据不可用的情况下构建假设数据。想象一下,例如,一个数据集,其中每列包含不同数量的+符号。 Andrie 2011-05-19 14:03:52

+0

当然。你的方法好得多。 – 2011-05-19 19:49:17