【问题标题】:keep column as input in aggregate function output in R将列作为输入保留在 R 中的聚合函数输出中
【发布时间】:2016-09-19 05:49:35
【问题描述】:

我正在使用一个函数 a 来计算列值相对于其他两列值的平均值,但是当调用该函数时,它会给出更改了列名的输出。我想保持与输入文件相同的列

这是一个函数代码,我想在其中计算列total_pause_time 相对于列employee_is 和group_id 的输入文件my_data 的平均值 我在函数中将 total_pause_time 表示为 col_name1,同样将 employee_id 表示为 col_name2,将 group_id 表示为 col_name3。在输出中,我得到的列名是col_name1、col_name2、col_name3,而不是total_pause_time、employee_id 和group_id。

{
  avg <- aggregate(col_name1~col_name2+col_name3,input_file,FUN="mean")
  write.csv(avg, file = "average.csv")
 }

avg(my_data$total_pause_time,my_data$employee_id,my_data$group_id,my_data)

【问题讨论】:

  • 我猜你需要aggregate(data['total-pause_time'], data[c('employee_id', 'group_id']), FUN = mean)
  • 公式的 LHS 将是列值。 RHS 行索引。如果您要使用公式方法,那么只需使用数据参数和列名。

标签: r csv aggregate aggregate-functions


【解决方案1】:

如果我们需要一个函数,请使用[ 而不是$ 对列进行子集化

avg <- function(col_name1, col_name2, col_name3){
  aggregate(data[col_name1], data[c(col_name2,col_name3)],  FUN = mean)
}

avg("total_pause_time", "employee_id", "group_id")

数据

set.seed(24)
data <- data.frame(employee_id = rep(1:3, each = 3),
                    group_id = sample(1:3, 9, replace=TRUE), 
                    total_pause_time = sample(1:5, 9, replace=TRUE))

【讨论】:

    猜你喜欢
    • 2021-12-05
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    相关资源
    最近更新 更多