r - data.table中按组转置的向量

标签 r data.table

什么是惯用的data.table方法来生成一个data.table,该data.table包含一个单独的列,用于由函数返回的,按组计算的向量的元素?

考虑一下data.table:

library(data.table)
data(iris)
setDT(iris)

如果函数是range(),我希望输出类似于:
iris[, .(min_petal_width = min(Petal.Width), 
         max_petal_width = max(Petal.Width)
         ), keyby = Species] # produces desired output

但使用range()函数。

我可以使用dcast,但这很丑陋:
dcast(
  iris[, .( petal_width = range(Petal.Width), 
            value = c("min_petal_width", "max_petal_width")), 
       keyby = Species],
  Species ~ value, value.var = "petal_width")

我希望有一个更简单的表达,大致如下:
iris[, (c("min_petal_width","max_petal_width")) = range(Petal.Width), 
      keyby = Species] # doesn't work

最佳答案

您的方法非常接近。只需记住,您需要向data.table提供一个列表,它会很乐意接受它。因此,您可以使用:

iris[, c("min_petal_width","max_petal_width") := as.list(range(Petal.Width)), 
     by = Species]

我误解了这个问题。由于您想汇总结果而不是添加新列,因此可以使用
cols <- c("min_petal_width", "max_petal_width")
iris[, setNames(as.list(range(Petal.Width)), cols), keyby = Species] 

但我敢肯定,还有其他一些data.table方法。

关于r - data.table中按组转置的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37750832/

相关文章:

r - data.table::merge 如何避免使用合并编码警告?

基于data.table R中列的不等式*滚动*条件的滚动值

r - OHLC 图表的 GGPlot 使用条形图,而不是蜡烛图

r - 将 data.frame 和 data.frames 列表与 R 中没有公共(public)变量的组合

r - 比较多个不同长度的向量

regex - 在 Shiny 中使用 textOutput() 在单独的行上打印句子

r - data.table 相当于 tidyr::complete with group_by with on and by 语法

在具有多个匹配项的 data.table 中滚动连接

r - 我如何对 data.table 中特定列的不同子集取平均值?

mysql - R中的多个数据库连接