gpt4 book ai didi

r - 在 Data.table 中使用汇总函数

转载 作者:行者123 更新时间:2023-12-03 22:00:57 25 4
gpt4 key购买 nike

我在学习 data.table使用示例,我被自己的场景困住了。

我正在使用 cars数据集并转换为 data.table尝试我的命令。

library(data.table)
> cars.dt=data.table(cars)
> cars.dt[1:5]
speed dist
1: 4 2
2: 4 10
3: 7 4
4: 7 22
5: 8 16
.
.

我想计算每组 speed的汇总统计量并将其存储在不同的列中,但值存储在多行中。

例如
 > cars.dt[, summary(dist), by="speed"]
speed V1
1: 4 2
2: 4 4
3: 4 6
4: 4 6
5: 4 8
---
110: 25 85
111: 25 85
112: 25 85
113: 25 85
114: 25 85

我期待以下输出,但我无法实现。
    speed   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
1: 4 2 4 6 6 8 10
2: 7 4.0 8.5 13.0 13.0 17.5 22.0
3: 8 16 16 16 16 16 16
4: 9 10 10 10 10 10 10
5: 10 18 22 26 26 30 34
6: 11 17.00 19.75 22.50 22.50 25.25 28.00
7: 12 14.0 18.5 22.0 21.5 25.0 28.0
8: 13 26 32 34 35 37 46
9: 14 26.0 33.5 48.0 50.5 65.0 80.0
10: 15 20.00 23.00 26.00 33.33 40.00 54.00
11: 16 32 34 36 36 38 40
12: 17 32.00 36.00 40.00 40.67 45.00 50.00
13: 18 42.0 52.5 66.0 64.5 78.0 84.0
14: 19 36 41 46 50 57 68
15: 20 32.0 48.0 52.0 50.4 56.0 64.0
16: 22 66 66 66 66 66 66
17: 23 54 54 54 54 54 54
18: 24 70.00 86.50 92.50 93.75 99.75 120.00
19: 25 85 85 85 85 85 85

我尝试了以下命令,但输出不在 data.table 中
> cars.dt[, print(summary(dist)), by="speed"] 
Min. 1st Qu. Median Mean 3rd Qu. Max.
2 4 6 6 8 10
Min. 1st Qu. Median Mean 3rd Qu. Max.
4.0 8.5 13.0 13.0 17.5 22.0
...
Min. 1st Qu. Median Mean 3rd Qu. Max.
70.00 86.50 92.50 93.75 99.75 120.00
Min. 1st Qu. Median Mean 3rd Qu. Max.
85 85 85 85 85 85
Empty data.table (0 rows) of 1 col: speed

使用 by 时,我无法使用返回多个值的函数条款。

如果有人对如何写这个有任何想法,将不胜感激。

也让我知道这是否可能在 data.table 中

最佳答案

尝试:

 dt1 <- cars.dt[, as.list(summary(dist)), by="speed"]
head(dt1)
# speed Min. 1st Qu. Median Mean 3rd Qu. Max.
#1: 4 2 4.00 6.0 6.0 8.00 10
#2: 7 4 8.50 13.0 13.0 17.50 22
#3: 8 16 16.00 16.0 16.0 16.00 16
#4: 9 10 10.00 10.0 10.0 10.00 10
#5: 10 18 22.00 26.0 26.0 30.00 34
#6: 11 17 19.75 22.5 22.5 25.25 28

你也可以考虑 summaryBy来自 doBy对要输出的汇总函数进行一些控制。
 library(doBy)
dt2 <- summaryBy(.~speed, cars.dt, FUN=c(min, median, mean, max))
head(dt2,2)
# speed dist.min dist.median dist.mean dist.max
#1: 4 2 6 6 10
#2: 7 4 13 13 22

我猜 as.list 的区别和 list论据是:

没有分组变量
 list(summary(cars.dt$speed))  #this gets a `list` with one `list element`
#[[1]]
# Min. 1st Qu. Median Mean 3rd Qu. Max.
# 4.0 12.0 15.0 15.4 19.0 25.0

as.list(summary(cars.dt$speed)) #whereas this is also a list with multiple elements
# $Min.
#[1] 4

#$`1st Qu.`
#[1] 12

#$Median
#[1] 15

#$Mean
#[1] 15.4

#$`3rd Qu.`
#[1] 19

#$Max.
#[1] 25

list(1:5)as.list(1:5)

关于r - 在 Data.table 中使用汇总函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25928708/

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