跑WGCNA录入临床数据时这段代码
traitData =read.csv("D:\\desktop\\FemaleLiver-Data\\ClinicalTraits.csv")
dim(traitData) # 看看形状
names(traitData) # 看看列标
# 删除不必要的列.
allTraits = traitData[, -c(31, 16)] # 将去掉第31和16列(两个不包含数据的列)后的traitData存入allTraits中
allTraits = allTraits[,c(2, 11:36) ] # 在allTraits中保留第2,11到36列(只取样本名的性状相关数据)
# 这时的allTraits是只包含样本名和性状相关数据的矩阵
dim(allTraits) # 看看形状
names(allTraits) # 看看列标
# 形成一个包含临床特征的数据框
femaleSamples =rownames(datExpr) # femaleSamples存放存放录入基因表达量的样本名称
traitRows =match(femaleSamples, allTraits$Mice) # 将表达矩阵和性状矩阵中,样本名(Mice)重复的这些样本在allTraits中的行标返回给traitRows(一个数字向量)
datTraits = allTraits[traitRows, -1] # 在allTraits中取上步的得到的这些行(行),并删除第一列,然后组成矩阵datTraits
rownames(datTraits) = allTraits[traitRows, 1] # 因为上一步删了第一列,所以重新赋予第一列,即这些行的样本名字
collectGarbage() # 释放内存
出现错误Error in .rowNamesDF<-
(x, value = value) : 不允许有重复的'row.names'
此外: Warning message:
non-unique values when setting 'row.names':
请问如何解决
该回答引用GPTᴼᴾᴱᴺᴬᴵ
出现这个错误的原因是rownames()重复了,解决方法可以通过删除或者合并重复的行名,或者重新给每一行命名唯一的行名。
一种可能的解决方案是通过以下步骤处理datTraits矩阵的行名,确保每个行名都是唯一的:
# 查找重复的行名
duplicatedRows <- which(duplicated(rownames(datTraits)))
if (length(duplicatedRows) > 0) {
# 重命名重复的行名
rownames(datTraits)[duplicatedRows] <- paste0(rownames(datTraits)[duplicatedRows], ".duplicate")
}
# 检查是否还有重复的行名
duplicatedRows2 <- which(duplicated(rownames(datTraits)))
if (length(duplicatedRows2) > 0) {
stop("无法解决行名重复问题")
}
这个代码块会找出所有重复的行名并将它们重命名为<原来的名字>.duplicate,如果存在任何重复的行名,它会抛出一个错误。