gpt4 book ai didi

r - 使用 data.table 聚合

转载 作者:行者123 更新时间:2023-12-01 12:45:14 24 4
gpt4 key购买 nike

我正在寻找一种更简单的方法来使用 data.table 聚合和计算数值变量的百分比。下面的代码输出了想要的结果,我的问题是是否有更好的方法来获得相同的结果。我不太熟悉这个包,所以任何提示都会有用。

我想要以下列:

   second_factor_variable third_factor_variable factor_variable       porc porcentaje
1: HIGH C > 200 0.04456544 4 %
2: LOW A 51 - 100 0.31739130 32 %
3: LOW A 101 - 200 0.68260870 68 %
4: LOW A 26 - 50 0.00000000 0 %

porc 是数字百分比,porcentage 是四舍五入的百分比,用作 ggplot 调用中的标签。

library("ggplot2")
library("scales")
library("data.table")

### Generate some data
set.seed(123)
df <- data.frame(x = rnorm(10000, mean = 100, sd = 50))
df <- subset(df, x > 0)

df$factor_variable <- cut(df$x, right = TRUE,
breaks = c(0, 25, 50, 100, 200, 100000),
labels = c("0 - 25", "26 - 50", "51 - 100", "101 - 200", "> 200")
)

df$second_factor_variable <- cut(df$x, right = TRUE,
breaks = c(0, 100, 100000),
labels = c("LOW", "HIGH")
)

df$third_factor_variable <- cut(df$x, right = TRUE,
breaks = c(0, 50, 100, 100000),
labels = c("A", "B","C")
)

str(df)

### Aggregate
DT <- data.table(df)
dt = DT[, list(factor_variable = unique(DT$factor_variable),
porc = as.numeric(table(factor_variable)/length(factor_variable)),
porcentaje = paste( round( as.numeric(table(factor_variable)/length(factor_variable), 0 ) * 100 ), "%")
), by="second_factor_variable,third_factor_variable"]

编辑

我已经尝试过 agstudy 的解决方案仅使用一个变量进行分组,但我相信它不适用于生成标签(porcentaje 列)。在真实的数据集中,我最终遇到了类似的问题,我无法发现这个函数有什么问题。

grp <- function(factor_variable) {
porc = as.numeric(table(factor_variable)/length(factor_variable))
list(factor_variable = factor_variable[1],
porc =porc,
porcentaje = paste( round( porc, 0 ) * 100 , "%"))
}

DT[, grp(factor_variable) , by="second_factor_variable"]

数值正确

DT2 <- DT[DT$second_factor_variable %in% "LOW"]
table(DT2$factor_variable)/length(DT2$factor_variable)

我相信如果我用 2 个因子变量分组,也会出现同样的问题:

DT[, grp(factor_variable) , by="second_factor_variable,third_factor_variable"]

最佳答案

2 个更改:因式分解 porc 变量并且不使用 DT 来计算 factor_variable

DT[, {   porc = as.numeric(table(factor_variable)/length(factor_variable))
list(factor_variable = factor_variable[1],
porc =porc,
porcentaje = paste( round( porc, 0 ) * 100 , "%"))
}
, by="second_factor_variable,third_factor_variable"]

关于r - 使用 data.table 聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20794649/

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