删除/折叠R中的重复行

删除/折叠R中的重复行,r,duplicates,median,deviation,R,Duplicates,Median,Deviation,我正在使用下面的R代码,这是我从别处复制的()。对于我希望做的事情(即从数据集中删除/折叠重复项),似乎效果很好,但我不理解最后一行。我想知道在什么基础上删除/折叠副本。有人评论说这是基于中间绝对偏差(MAD),但我不这么认为。有人能帮我理解吗 Probesets=paste("a",1:200,sep="") Genes=sample(letters,200,replace=T) Value=rnorm(200) X=data.frame(Probesets,Genes,Value)

我正在使用下面的R代码,这是我从别处复制的()。对于我希望做的事情(即从数据集中删除/折叠重复项),似乎效果很好,但我不理解最后一行。我想知道在什么基础上删除/折叠副本。有人评论说这是基于中间绝对偏差(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)),]

是否确实要删除那些与
基因
值重复的行?至少这段代码是这样做的:

Y=X[which(!duplicated(X$Genes)),]
因此,
Y
只包含唯一的
基因
值。如果比较
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

df您确定要删除那些与
基因
值重复的行吗?至少这段代码是这样做的:

Y=X[which(!duplicated(X$Genes)),]
因此,
Y
只包含唯一的
基因
值。如果比较
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

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

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

重复项的排序方式将保留每个基因的最大值;尝试
all.equal(sort(Y[,“Value”])、as.numeric(sort)(使用(X,tapply(Value,Genes,max)()))
生成
TRUE
。顺便说一句,你可以省略代码中的
,只写
X[!duplicated(X$Genes),]
。谢谢你的澄清和建议!)对重复序列进行排序,使每个基因的最大值保持不变;尝试
all.equal(sort(Y[,“Value”])、as.numeric(sort)(使用(X,tapply(Value,Genes,max)()))
生成
TRUE
。顺便说一句,你可以省略代码中的
,只写
X[!duplicated(X$Genes),]
。谢谢你的澄清和建议!)非常感谢您的详细回答。是的,我的意图是只为一个独特的基因保留行。您完全正确,这将删除所有列中不包含重复值的行。严格地说,你是完全正确的,但我认为这是本意。谢谢。非常感谢你详细的回答。是的,我的意图是只为一个独特的基因保留行。您完全正确,这将删除所有列中不包含重复值的行。严格地说,你是完全正确的,但我认为这是本意。非常感谢。