gpt4 book ai didi

R中data.table的行名,用于model.matrix

转载 作者:行者123 更新时间:2023-12-04 22:48:29 24 4
gpt4 key购买 nike

我有一个 data.table DT我想跑 model.matrix在上面。每行都有一个字符串ID,存储在IDDT的栏目.当我跑 model.matrixDT ,我的公式不包括 ID柱子。问题是,model.matrix由于 NAs 丢弃了一些行。如果我设置 DT 的行名到 ID列,之前调用 model.matrix ,那么最终的模型矩阵有行名,我已经准备好了。否则,我无法弄清楚我最终得到了哪些行。我正在使用 rownames(DT) = DT$ID 设置行名.但是,当我尝试向 DT 添加新列时, 我收到投诉

"Invalid .internal.selfref detected . . . At an earlier point, this data.table has been copied by R."



所以我想知道
  • 有没有更好的方法来为 data.table 设置行名?
  • 有没有更好的方法来解决这个问题。
  • 最佳答案

    这里有几个问题。

    首先,它是data.table的一个特点。他们没有 rownames ,相反,他们有 key s 更强大。见 this great vignette .

    但是,这并不是世界末日。 model.matrix当您传递 data.table 时返回合理的行名

    例如

    A <- data.table(ID = 1:5, x = c(NA, 1:4), y = c(4:2,NA,3))

    mm <- model.matrix( ~ x + y, A)

    rownames(mm)

    ## [1] "2" "3" "5"

    所以第 2,3 和 5 行是包含在 model.matrix 中的那些。

    现在,您可以将此序列作为列添加到 A .如果您随后将 key 设置为其他内容(从而丢失原始顺序),这将很有用
    A[, rowid := seq_len(nrow(A)]

    您可能会考虑将其设为字符(如 mm 的行名)),但这并不重要(因为您可以在需要引用时轻松地将 rownames(mm) 转换为数字。

    至于 data.table的警告给,如果你读下一句话

    Avoid key<-, names<- and attr<- which in R currently (and oddly) may copy the whole data.table. Use set* syntax instead to avoid copying: setkey(), setnames() and setattr()


    rownames是一个属性 rownames<- (内部在某个时候使用等效于 attr<- )将以相同的方式(可能复制)。

    来自 `row.names<-.data.frame` 的线路是
    attr(x, "row.names") <- value

    话虽如此, data.tables没有行名,所以没有必要设置它们。

    关于R中data.table的行名,用于model.matrix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13977745/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com