【发布时间】:2020-12-10 18:39:48
【问题描述】:
当我想将第一列设置为行名时出现错误:
dt <- fread('../data/data_logTMP.csv', header = T)
rownames(dt) <- dt$GENE
我使用duplicated() 来检查值:
> which(duplicated(dt$GENE) == TRUE)
[1] 20209 21919
因此,我比较了这些值:
> dt$GENE[20209] == dt$GENE[21919]
[1] FALSE
> dt$GENE[20209]
[1] "1-Mar"
> dt$GENE[21919]
[1] "2-Mar"
为什么这两个值被识别为重复?我该如何解决这个问题?
【问题讨论】:
-
您使用了 fread,因此您的 dt 是一个 data.table。 data.tables 不使用行名;您尝试分配行名的目标是什么?
-
关于您的问题,这不是重复的工作方式。 duplicated 的输出告诉您重复元素的索引,但 该元素的第一个实例 位于向量中的其他位置。看看重复的(c(1, 1, 2, 3))
-
没有创建一个可以有行名的数据框?我使用了 is.data.frame(dt) 并得到了 True。我尝试了示例 duplicated(c(1, 1, 2, 3)),我知道第一个数字不能被识别为重复。我发现了真正的重复值。非常感谢!
-
is.data.frame将是TRUE,因为data.table是data.frame的扩展(您可以查看class(dt))。行名是扩展有点混乱的地方;data.table更喜欢使用 keys 而不是行名;见this vignette -
谢谢你这么详细的解释!
标签: r