R-如何基于多个因素对不同的data.table列运行平均值和最大值并返回原始名称

新闻节目

我需要将R代码从data.frame+更改plyrdata.tables,因为我需要一种更快,更节省内存的方式来处理大数据集。不幸的是,我的R技能非常有限,我整天都碰壁了。如果SO专家可以启发您,将不胜感激。

我的目标

  • 基于2个函数(平均值和最大值)聚合data.table中的行,在选定的列上运行(列名通过vector传递),同时按列进行分组也通过vector传递。
  • 结果DT应包含原始列名。
  • 应该不会是DT的不必要的复制,以节省内存

我的测试代码

DT = data.table( a=LETTERS[c(1,1,1:4)],b=4:9, c=3:8, d = rnorm(6), 
                 e=LETTERS[c(rep(25,3),rep(26,3))], key="a" )

GrpVar1 <- "a"
GrpVar2 <- "e"
VarToMax <- "b"
VarToAve <- c( "c", "d")

我尝试过但对我没有用的东西

DT[, list( b=max( b ), c=mean(c), d=mean(d) ), by=c( GrpVar1, GrpVar2 ) ]  
# Hard-code col name - not what I want

DT[, list( max( get(VarToMax) ), mean( get(VarToAve) )), by=c( GrpVar1, GrpVar2 ) ]  
# Col names become 'V1', 'V2', worse, 1 column goes missing - Not what I want either

DT[, list( get(VarToMax)=max( get(VarToMax) ), 
           get(VarToAve)=mean( get(VarToAve) ) ), by=c( GrpVar1, GrpVar2 ) ]
# Above code gave Error!

附加问题

基于我对DT的非常有限的理解,该with = F参数应指示R解析VarToMax和VarToAve的值,但是运行下面的代码会导致错误。

DT[, list( max(VarToMax), mean(VarToAve) ), by=c( GrpVar1, GrpVar2 ), with=F ]

# Error in `[.data.table`(DT, , list(max(VarToMax), mean(VarToAve)), by = c(GrpVar1,  : 
#   object 'ansvals' not found
# In addition: Warning message:
# In mean.default(VarToAve) :
#   argument is not numeric or logical: returning NA

现有的SO解决方案无济于事

Arun的解决方案是我得到了这一点,但是我很坚持。他的其他解决方案使用lapply.SDcols涉及创建2个额外的DT,这不符合我的内存保存要求。

dt1 <- dt[, lapply(.SD, sum), by=ID, .SDcols=c(3,4)]
dt2 <- dt[, lapply(.SD, head, 1), by=ID, .SDcols=c(2)]

我对data.table感到困惑!非常感激任何的帮助!

大卫·阿伦堡

这是我谦虚的尝试

DT[, as.list(c(setNames(max(get(VarToMax)), VarToMax), 
               lapply(.SD[, ..VarToAve], mean))), 
     c(GrpVar1, GrpVar2)]    
#    a e b c          d
# 1: A Y 6 4 -0.8000173
# 2: B Z 7 6  0.2508633
# 3: C Z 8 7  1.1966517
# 4: D Z 9 8  1.7291615

或者,您可以用最高的效率colMeanseval(as.name())组合,而不是lapplyget

DT[, as.list(c(setNames(max(eval(as.name(VarToMax))), VarToMax), 
             colMeans(.SD[, ..VarToAve]))), 
     c(GrpVar1, GrpVar2)]   
#    a e b c          d
# 1: A Y 6 4 -0.8000173
# 2: B Z 7 6  0.2508633
# 3: C Z 8 7  1.1966517
# 4: D Z 9 8  1.7291615

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何创建一个函数来计算和返回平均值、最大值和最小值?

来自分类Dev

返回具有不同组值的平均值最大值

来自分类Dev

获取R中每个列每月5个最大值的平均值

来自分类Dev

如何计算 QuickBase 中最大值的平均值?

来自分类Dev

如何使用Shell查找间隔中的平均值和最大值

来自分类Dev

Phyton:如何获取按ID分组的每个列的n个最大值的平均值

来自分类Dev

r使用多个因素汇总的data.table

来自分类Dev

如何获取Julia中数据帧所有列的算术平均值,最小值和最大值?

来自分类Dev

我如何用R中的多个列和行的每个单元格的平均值替换每个单元格的多个值

来自分类Dev

计算R中的最小值,最大值和平均值

来自分类Dev

如何基于日期列与R中的Missind数据计算数据框中多个列的月平均值

来自分类Dev

如何在PouchDB上模拟聚合函数的平均值,总和,最大值,最小值和计数?

来自分类Dev

如何以更少的数据库往返获得平均值、最小值和最大值?

来自分类Dev

R:bench :: mark不返回最大值和均值

来自分类Dev

如何使用循环以基于R数据帧中另一列的平均值替换值

来自分类Dev

计算R表中不同值的平均值

来自分类Dev

R中不同列的加权平均值

来自分类Dev

R data.table用数值列的平均值替换NA,将标称值的最频繁值替换为NA

来自分类Dev

R(ggplot)-如何基于仅具有一个数字变量和不同类别的data.frame生成多个图(构面)。变数

来自分类Dev

R中data.frame(列表)的列平均值

来自分类Dev

R中data.frame(列表)的列平均值

来自分类Dev

Elasticsearch-如何获取嵌套文档集的最小值/最大值/平均值

来自分类Dev

Matlab:如何在直方图中绘制最大值,最小值和平均值?

来自分类Dev

如何显示Tableau中的最大值,最小值,中位数和平均值

来自分类Dev

如何在postgresql中计算最大值,最小值和平均值

来自分类Dev

如何将 cv::Mat 变为 2 乘以 2 最大值的平均值?

来自分类Dev

如何基于一个因素在R中的绘图上获得不同的点?

来自分类Dev

R-如何计算n个先前值的平均值/平均值,但不包括当前观察值(滚动平均值)

来自分类Dev

当以秒为单位的大量数字达到平均值,最大值和最小值时,如何转换为日期时间格式?

Related 相关文章

  1. 1

    如何创建一个函数来计算和返回平均值、最大值和最小值?

  2. 2

    返回具有不同组值的平均值最大值

  3. 3

    获取R中每个列每月5个最大值的平均值

  4. 4

    如何计算 QuickBase 中最大值的平均值?

  5. 5

    如何使用Shell查找间隔中的平均值和最大值

  6. 6

    Phyton:如何获取按ID分组的每个列的n个最大值的平均值

  7. 7

    r使用多个因素汇总的data.table

  8. 8

    如何获取Julia中数据帧所有列的算术平均值,最小值和最大值?

  9. 9

    我如何用R中的多个列和行的每个单元格的平均值替换每个单元格的多个值

  10. 10

    计算R中的最小值,最大值和平均值

  11. 11

    如何基于日期列与R中的Missind数据计算数据框中多个列的月平均值

  12. 12

    如何在PouchDB上模拟聚合函数的平均值,总和,最大值,最小值和计数?

  13. 13

    如何以更少的数据库往返获得平均值、最小值和最大值?

  14. 14

    R:bench :: mark不返回最大值和均值

  15. 15

    如何使用循环以基于R数据帧中另一列的平均值替换值

  16. 16

    计算R表中不同值的平均值

  17. 17

    R中不同列的加权平均值

  18. 18

    R data.table用数值列的平均值替换NA,将标称值的最频繁值替换为NA

  19. 19

    R(ggplot)-如何基于仅具有一个数字变量和不同类别的data.frame生成多个图(构面)。变数

  20. 20

    R中data.frame(列表)的列平均值

  21. 21

    R中data.frame(列表)的列平均值

  22. 22

    Elasticsearch-如何获取嵌套文档集的最小值/最大值/平均值

  23. 23

    Matlab:如何在直方图中绘制最大值,最小值和平均值?

  24. 24

    如何显示Tableau中的最大值,最小值,中位数和平均值

  25. 25

    如何在postgresql中计算最大值,最小值和平均值

  26. 26

    如何将 cv::Mat 变为 2 乘以 2 最大值的平均值?

  27. 27

    如何基于一个因素在R中的绘图上获得不同的点?

  28. 28

    R-如何计算n个先前值的平均值/平均值,但不包括当前观察值(滚动平均值)

  29. 29

    当以秒为单位的大量数字达到平均值,最大值和最小值时,如何转换为日期时间格式?

热门标签

归档