【问题标题】:Self-made function works in test but not for my actual data set自制功能在测试中有效,但不适用于我的实际数据集
【发布时间】:2018-11-26 19:22:04
【问题描述】:

我正在处理函数。我为 Basal Area 写了一个函数

 ba <- function(dbh,na.rm) {
 stopifnot(is.numeric(dbh))
  answer <- dbh^2*(0.005454)
  return(answer)
  }

该函数适用于测试向量。现在我正在尝试对我拥有的数据集做一些总结。

(直接从R复制粘贴)

plot.summary <- trees %>% group_by(MU, Plot, Inv) %>% summarize(year = first(Year), arithemtic.mean = my.mean(dbh, na.rm = TRUE), quadratic.mean = my.q.mean(dbh, na.rm = TRUE), var = my.var(dbh, na.rm = TRUE), n.trees = n())

(修改间距以方便阅读)

plot.summary <- trees %>% group_by(MU, Plot, Inv) %>% 
summarize(year = first(Year), arithemtic.mean = my.mean(dbh, na.rm = TRUE),
quadratic.mean = my.q.mean(dbh, na.rm = TRUE), var = my.var(dbh, na.rm = TRUE), 
n.trees = n())

当我运行时它会说

Error in summarise_impl(.data, dots) : 
Column `basal.area` must be length 1 (a summary value), not 19

我不知道为什么。数据集只有 18 列。 当我不包括基底区域部分时,我的命令可以正常工作。

我不确定我可能会错过什么

感谢您的帮助!

【问题讨论】:

  • 看起来你的函数返回一个向量,只要它的输入。 summarize 用于返回单个值的聚合函数(如 mean)。因此,当您得到长度为 19 而不是预期长度 1 的结果时,您会收到错误“Column basal.area must be length 1 (a summary value), not 19”。您可以使用 mutate 而不是 summarize 来保持相同的行数,而不是将数据聚合到每组 1 行。
  • 因此,由于我首先对一些数据进行分组,因此我的函数试图为每一行获取一个单独的基底区域,现在为每个“组”平均它?
  • 我也尝试做 mutate plot.summary &lt;- trees %&gt;% group_by(MU, Plot, Inv) %&gt;% summarize(year = first(Year), arithemtic.mean = my.mean(dbh, na.rm = TRUE), quadratic.mean = my.q.mean(dbh, na.rm = TRUE), var = my.var(dbh, na.rm = TRUE), n.trees = n()) %&gt;% mutate(basal.area = ba(dbh, na.rm= TRUE)) 并且 R 返回了 Error in mutate_impl(.data, dots) : Column 'basal.area' must be length 3 (the group size) or one, not 4
  • 您能否发布一些示例数据以及您想要的结果? 2 组,每组 2-3 行应该足够了。

标签: r function tree


【解决方案1】:

您在 group_by 函数中引用的变量不在数据集 trees 中,因此我冒昧地创建了一个可重现的示例,希望能满足您的需求。

假设您想按Height 之类的变量进行分组,下面是一个工作示例:

plot.summary <- trees %>% 
  group_by(Height) %>% 
  summarise(mean.basal.area = mean(ba(Girth)),
    n.trees = n())

在上面,您的函数ba 被包裹在mean 中。这导致共享相同高度的一组周长值的平均基底面积。

这是你想要的吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-06
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 2014-06-09
    • 2019-07-02
    • 1970-01-01
    相关资源
    最近更新 更多