什么是惯用的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/