如何在函数中插入数据框,然后使用 tapply 按组分组

Posted

技术标签:

【中文标题】如何在函数中插入数据框,然后使用 tapply 按组分组【英文标题】:How can I insert a data frame in a function and then group by groups with tapply 【发布时间】:2022-01-10 11:08:48 【问题描述】:

我是 R 编程新手,我创建了一个函数,可以从我们插入的列表或向量中返回一些基本统计数据。当我想插入一个数据框时,问题就来了。

我要插入的数据框有 2 列;第一个是指一组(1 或 2),第二个是指颅骨的宽度,以厘米为单位(数值)。我想分别取两组的平均值,以便稍后我可以比较它们(1 和 2)、众数、中位数、四分位数......(我在函数中拥有的一切)。

我突然想到使用我创建的函数来插入列表或向量,然后对我进行分组,使用 tapply 函数,但它通过控制台给了我一个错误,这个:

Error in tapply(archivo, archivo$`Época histórica`, descriptive_statistics) : 
  arguments must have same length

这里有我做的功能和tapply:

descriptive_statistics = function(x)
  result <- list(
    mean(x), exp(mean(log(x))), median(x), modes(x),
    (range(x)[2] - range(x)[1]), var(x), sqrt(var(x)), sqrt(var(x)) / mean(x)
  )
  names(result) <- c('Aritmetic mean', 'Geometric mean', 'Median', 'Mode', 'Range', 'Variance', 'Standard deviation', 'Pearsons coefficient of variation')
  
  result


tapply(archivo, archivo$`Época histórica`, descriptive_statistics)


我可以怎样改进我的功能以便让我输入数据框?或者我可以在 tapply 函数中做些什么来让它对我有用?有人可以帮我解决这个问题吗?我也接受其他想法,我尝试过聚合和内部汇总函数等,但它没有给我想要的统计数据,比如皮尔逊系数。

非常感谢您,问候

【问题讨论】:

【参考方案1】:

在函数中传递数据框的列而不是完整的数据框。您尚未共享数据,因此很难给出具体答案,但我们假设另一列名为col1。在这种情况下,您可以这样做 -

tapply(archivo$col1, archivo$`Época histórica`, descriptive_statistics)

【讨论】:

谢谢,我不知道我以前怎么不喜欢这个

以上是关于如何在函数中插入数据框,然后使用 tapply 按组分组的主要内容,如果未能解决你的问题,请参考以下文章

r语言apply函数与tapply函数有啥区别

按所有列拆分数据框并插入到数据框列表中

如何生成多个文本框然后插入数据库

使用 tapply 函数生成平均值时出错

excel按条件求和 excel按条件求和具体步骤

数据框:如何在 Scala 中分组/计数然后按计数排序