gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 13:31:14 25 4
gpt4 key购买 nike

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

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