【问题标题】:Removing duplicates from the data从数据中删除重复项
【发布时间】:2014-02-08 05:41:00
【问题描述】:

我已经加载了 20 个带有函数的 csv 文件:

tbl = list.files(pattern="*.csv")
list_of_data = lapply(tbl, read.csv)

我将所有这些文件合二为一:

all_data = do.call(rbind.fill, list_of_data)

在新表中有一个名为“Accession”的列。组合后很多名字(Accession)都被重复了。我想删除所有重复项。 另一个问题是其中一些“名称”几乎相同。不同的是有名字,后面变成点和数字。

让我给你看看它的样子:

AT3G26450.1 <--
AT5G44520.2
AT4G24770.1
AT2G37220.2
AT3G02520.1
AT5G05270.1
AT1G32060.1
AT3G52380.1
AT2G43910.2
AT2G19760.1
AT3G26450.2 <--

&lt;-- = 相同的样本,不同的名称。应视为一。所以忽略点和后面的数字。

试过这个:

all_data$CleanedAccession = str_extract(all_data$Accession, "^[[:alnum:]]+")
all_data = subset(all_data, !duplicated(CleanedAccession))

Error in `$<-.data.frame`(`*tmp*`, "CleanedAccession", value = character(0)) : 

【问题讨论】:

  • 您是要删除重复的行还是只是通过删除“.X”来重命名它。
  • 我想删除带有重复项(Accession)的行,并删除点前具有相同编号的加入。

标签: regex r duplicates


【解决方案1】:

您可以使用此命令对值进行子集化和重命名:

subset(transform(alldata, Ascension = sub("\\..*", "", Ascension)), 
       !duplicated(Ascension))

   Ascension
1  AT3G26450
2  AT5G44520
3  AT4G24770
4  AT2G37220
5  AT3G02520
6  AT5G05270
7  AT1G32060
8  AT3G52380
9  AT2G43910
10 AT2G19760

【讨论】:

  • 工作良好。第二部分呢?删除其他“重复项”。
【解决方案2】:

怎么样

df  <- data.frame( Accession = c("AT3G26450.1",
                   "AT5G44520.2",
                   "AT4G24770.1",
                   "AT2G37220.2",
                   "AT3G02520.1",
                   "AT5G05270.1",
                   "AT1G32060.1",
                   "AT3G52380.1",
                   "AT2G43910.2",
                   "AT2G19760.1",
                   "AT3G26450.2"))

df[!duplicated(unlist(lapply(strsplit(as.character(df$Accession), 
   ".", fixed = T),  "[", 1))), ]

【讨论】:

  • 您可以拆分 '.' 并设置 fixed=TRUE 以稍微加快速度。
  • strsplit(all_data, "[.]") 中的错误:非字符参数。忘了说还有一些其他名称而不是“AT3G52380.1”。
  • Accession 变量是数据框中的因素,strsplit 需要一个字符参数。我已经更新了我的答案,以考虑因素变量和 RoyalTS 的建议。
猜你喜欢
  • 2013-06-09
  • 2019-06-22
  • 2016-05-16
  • 2011-06-29
  • 2014-06-08
  • 2016-09-27
  • 2020-05-08
  • 2011-08-08
相关资源
最近更新 更多