【问题标题】:How do you change the type of target column when using .() group by in R data.table在 R data.table 中使用 .() group by 时如何更改目标列的类型
【发布时间】:2018-07-06 19:58:49
【问题描述】:

这个问题类似于How to change type of target column when doing := by group in a data.table in R? 但是,我需要使用.() 表示法。

例子:

a <- data.table(ID = c("A", "B", "C", "A", "B", "C"), 
                TYPE = c(1, 1, 2, 2, 3, 3), 
                CLASS = c(1, 2, 3, 4, 5, 6))

b <- a[, .(Count = .N, "Failure Count" = sum(CLASS == "2"), 
       "Median DIF" = median(TYPE)), by = ID]

有没有办法使用这种不同的符号来做到这一点?这样做的原因是我想创建一个新表,而不是使用 := 表示法向现有表添加一列。

【问题讨论】:

  • 您的标题说“更改目标列的类型”,但您的详细信息说“避免复制”(即获取参考?) .这是两个不同的东西 - 是什么?
  • 我对“更改目标列的类型”的引用在b 中,错误是它期待一个双精度并得到一个整数,因为a$TYPE 是一个整数。第二部分“避免复制”是指我不希望b 包含与a 相同的所有列,只包含我指定的列。
  • 标题还是很混乱和错误的。 data.table := 的全部意义在于它就地运行,即没有复制。但是当您使用= 创建汇总/聚合时,您希望创建一个新表。此外a[..., TYPE := median(TYPE),... ] 会破坏现有数据,这可能是错误的。在这种情况下,它会尝试将数字存储在整数中。您不是在询问参考与制作副本,而是在询问“仅在摘要中保留选定的列”。这是通过仅列出您想在.(...) j-表达式中保留的列来处理的。

标签: r data.table


【解决方案1】:

显然您所要做的就是在median() 中添加as.numeric()

b <- a[, .(Count = .N, "Failure Count" = sum(CLASS == "2"), 
      "Median DIF" = median(as.numeric(TYPE))), by = ID]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多