以下R
查询的简单sqldf
等效命令是什么“
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
答案 0 :(得分:5)
正如我们在评论中所讨论的那样,sqldf
命令获得了sum
的&#39;值&#39;列按&#39;运行&#39;以及最后一次观察每个&#39;运行的其他列(如果有的话)。
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
。首先,要获得&#39;值的sum
&#39;第二次是每组最后一次观察。如果有NA
个值,请指定na.rm=TRUE
的{{1}}参数以及sum
中的na.action=NULL
。 aggregate
中的默认选项为aggregate
,如果存在任何&#39; NA&#39},则可以从计算中删除完整的行。值。
na.action=na.omit
和d1 <- aggregate(value~run, dataFrame, FUN=sum, na.rm=TRUE, na.action=NULL)
d2 <- aggregate(.~run, dataFrame, tail,1, na.action=NULL)
按&#39;运行&#39;
merge
或使用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
(感谢@Frank)
dplyr
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