聚合sqldf查询的纯R等价物是什么?

聚合sqldf查询的纯R等价物是什么?,r,R,以下sqldfquery的普通R等效命令是什么 test正如我们在评论中所讨论的,sqldf命令获取按“run”分组的“value”列的sum,以及每个“run”的最后观察值和其他列(如果有) library(sqldf) sqldf("SELECT *, SUM(value) FROM dataFrame GROUP BY run") # run value value2 SUM(value) #1 a -0.848370044 0.2387489 -0.162724

以下
sqldf
query的普通
R
等效命令是什么


test正如我们在评论中所讨论的,
sqldf
命令获取按“run”分组的“value”列的
sum
,以及每个“run”的最后观察值和其他列(如果有)

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
s。首先,获取'value'的
sum
,第二个是每组的最后一次观察。如果存在
NA
值,请指定
sum
NA.rm=TRUE
参数以及
NA.action=NULL
>聚合
聚合
中的默认选项是
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)
或使用
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)

数据
set.seed(24)

dataFrame在注释过时(已集成到Q和/或A中)后,“清理”/“删除注释”是一种非常习惯的做法。当您将鼠标悬停在自己的注释上时,可以看到一个(x)。找到一个不太糟糕的
dplyr
方式:
dataFrame%>%group_by(run)%%>%mutate(s=sum(value,na.rm=TRUE))%%>%slice(n())
不幸的是,如果您有data.table,它会中断,这要归功于此错误:
d1 <- aggregate(value~run, dataFrame, FUN=sum, na.rm=TRUE, na.action=NULL)
d2 <- aggregate(.~run, dataFrame, tail,1, na.action=NULL)
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
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
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))