r - 使用 data.table 编写具有聚合功能的 R 函数

标签 r data.table

我正在使用 data.table 包编写带有聚合的 R 函数。我的 table 看起来像:

Name1   Name2   Price
  A       F      6
  A       D      5
  A       E      2
  B       F      4
  B       D      7
  C       F      4
  C       E      2

我的函数如下所示:

MyFun <- function(Master_Table, Desired_Column, Group_By){
  Master_Table <- as.data.table(Master_Table)
  Master_Table_New <-  Master_Table[, (Master_Table$Desired_Column), by=.(Desired_Column$Group_By)]
  return(Master_Table_New)
}

我想计算df[, .(Group_Median =median(Price), by=.(Name1, Name2)] 但是当我将它应用到我自己的函数中时,它总是给我错误,例如:`

Error in `[.data.table`(Master_Table, , .(Med_Group = mean(Master_Table$Desired_Column)),  : 
  column or expression 1 of 'by' or 'keyby' is type NULL. Do not quote column names. Usage: DT[,sum(colC),by=list(colA,month(colB))] `

或者:

Error in `[.data.table`(Master_Table, , .(Med_Group = mean(Master_Table$Desired_Column)),  : 
  column or expression 1 of 'by' or 'keyby' is type NULL. Do not quote column names. Usage: DT[,sum(colC),by=list(colA,month(colB))] 

这将是我整个工作的第一步。如果有人对此有任何了解,请告诉我,任何帮助将不胜感激!

最佳答案

该函数应写为:

MyFun <- function(Master_Table, Desired_Column, Group_By){
  Master_Table[, sapply(.SD, mean),  .SDcols = Desired_Column, by=Group_By]
}

#Have a close watch here how Group_By is prepared to provide multiple columns.
MyFun(DT, "Price", "Name1,Name2")
#     Name1 Name2 V1
# 1:     A     F  6
# 2:     A     D  5
# 3:     A     E  2
# 4:     B     F  4
# 5:     B     D  7
# 6:     C     F  4
# 7:     C     E  2

数据

DT <- read.table(text = 
"Name1   Name2   Price
A       F      6
A       D      5
A       E      2
B       F      4
B       D      7
C       F      4
C       E      2",
header = TRUE, stringsAsFactors = FALSE)

setDT(DT)

关于r - 使用 data.table 编写具有聚合功能的 R 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49701313/

相关文章:

R 使用 cut() 函数分箱后填充空单元格

r - 根据id提取可达行

r - 更改随机选择的 data.table 子集的值

r - 根据条件合并/加入数据框/表 -> 或 <

rowMeans 如果列名是数字

R将多个数据表 append 到列表

r - R 如何进行精确的 wilcoxon 秩和检验?

r - 一次为环境分配多个值

r - 使用每列使用不同参数的函数转换多列

r - 如何按组(ID)复制最后一行?