0

我正在使用以下 R 代码,该代码是从其他地方(https://support.bioconductor.org/p/70133/)复制而来的。似乎很适合我希望做的事情(即从数据集中删除/折叠重复项),但我不明白最后一行。我想知道删除/折叠重复项的依据是什么。有人评论说它是基于中值绝对偏差 (MAD),但我没有遵循这一点。有人可以帮我理解这一点吗?

 Probesets=paste("a",1:200,sep="")
 Genes=sample(letters,200,replace=T)
 Value=rnorm(200)
 X=data.frame(Probesets,Genes,Value)
 X=X[order(X$Value,decreasing=T),]
 Y=X[which(!duplicated(X$Genes)),]
4

2 回答 2

1

您的代码保留了包含每个基因最大值的记录。

于 2020-04-16T12:35:39.100 回答
1

您确定要删除Genes值重复的那些行吗?这至少是这段代码的作用:

Y=X[which(!duplicated(X$Genes)),]

因此,Y仅包含唯一Genes值。如果你比较nrow(Y)length(unique(X$Genes))你会看到结果是一样的:

nrow(Y); length(unique(X$Genes))
[1] 26
[1] 26

如果你想删除所有列中包含重复值的行,这可以说是重复行的定义,那么你可以这样做:

Y=X[!duplicated(X),]

要了解它是如何工作的,请考虑以下示例:

df <- data.frame(
  a = c(1,1,2,3),
  b = c(1,1,3,4)
)
df
  a b
1 1 1
2 1 1
3 2 3
4 3 4

df[!duplicated(df),]
  a b
1 1 1
3 2 3
4 3 4
于 2020-04-16T11:38:54.627 回答