gpt4 book ai didi

r - 聚合 sqldf 查询的普通 R 等效项是什么?

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

以下 sqldf 查询的普通 R 等效命令是什么”

test <- sqldf("SELECT *, SUM(value) FROM dataFrame GROUP BY run")

我尝试这样的事情:

test <-aggregate(dataFrame$value, by=list(dataFrame$run), FUN=sum, na.rm=TRUE)

但不知何故,SUM 发生在 dataFrame 的每一列

最佳答案

正如我们在评论中讨论的那样,sqldf 命令获取按“run”分组的“value”列的 sum 以及最后观察的其他列(如果任何)对于每个“运行”。

library(sqldf)
sqldf("SELECT *, SUM(value) FROM dataFrame GROUP BY run")
# run value value2 SUM(value)
#1 a -0.848370044 0.2387489 -0.1627249
#2 b 0.002311942 0.3688175 -0.6826107
#3 c -1.316908124 NA -0.3993579

要使用aggregate获得类似的输出,您可以尝试两个aggregate。首先,获取每组最后一次观察的“值”的总和。如果存在 NA 值,请指定 sumna.rm=TRUE 参数以及 na.action=NULL来自聚合的code>。 aggregate 中的默认选项是 na.action=na.omit,如果存在任何“NA”值,它可以从计算中删除整行。

d1 <- aggregate(value~run, dataFrame, FUN=sum, na.rm=TRUE, na.action=NULL)
d2 <- aggregate(.~run, dataFrame, tail,1, na.action=NULL)

并通过“run”合并

merge(d1, d2, by='run')
# run value.x value.y value2
#1 a -0.1627249 -0.848370044 0.2387489
#2 b -0.6826107 0.002311942 0.3688175
#3 c -0.3993579 -1.316908124 NA

或者使用data.table

library(data.table)
setDT(dataFrame)[,c(.SD[.N], SUMVALUE=sum(value, na.rm=TRUE)) , run]
# run value value2 SUMVALUE
#1: a -0.848370044 0.2387489 -0.1627249
#2: b 0.002311942 0.3688175 -0.6826107
#3: c -1.316908124 NA -0.3993579

或者使用dplyr(感谢@Frank)

library(dplyr)
dataFrame %>%
group_by(run) %>%
mutate(SUMVALUE=sum(value,na.rm=TRUE)) %>%
slice(n())
# run value value2 SUMVALUE
#1 a -0.848370044 0.2387489 -0.1627249
#2 b 0.002311942 0.3688175 -0.6826107
#3 c -1.316908124 NA -0.3993579

数据

  set.seed(24)
dataFrame <- data.frame(run=rep(letters[1:3], 4),
value=c(NA,rnorm(11)), value2=c(runif(11), NA))

关于r - 聚合 sqldf 查询的普通 R 等效项是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30918040/

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