726 2

[问答] R语言 summarise函数分组计算失败 [推广有奖]

  • 0关注
  • 0粉丝

小学生

57%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
52 点
帖子
6
精华
0
在线时间
8 小时
注册时间
2023-9-25
最后登录
2024-1-5

楼主
海阔天空7890 发表于 2023-10-13 15:25:42 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
  1. library(openxlsx)
复制代码
程序设计希望能将数据按照sp分组,通过自己定义的函数计算不同sp的relativeBA和relativeN,但是并没有成功达到预期,报错如下:

  1. > groups.importance_by_sp=summarise(sp_groups,BA_relative=relativeBA(),N_relative=relativeN())
  2. `summarise()` has grouped output by 'sp'. You can override using the `.groups` argument.
  3. Warning message:
  4. Returning more (or less) than 1 row per `summarise()` group was deprecated in dplyr 1.1.0.
  5. ℹ Please use `reframe()` instead.
  6. ℹ When switching from `summarise()` to `reframe()`, remember that `reframe()` always returns an ungrouped data frame and adjust
  7.   accordingly.
  8. Call `lifecycle::last_lifecycle_warnings()` to see where this warning was generated.
  9. > groups.importance_by_sp=reframe(sp_groups,BA_relative=relativeBA(),N_relative=relativeN())
  10. > groups.importance_by_sp
  11. # A tibble: 21,112 × 3
  12.    sp    BA_relative N_relative
  13.    <chr>       <dbl>      <dbl>
  14. 1 乌桕   0.00000167          1
  15. 2 乌桕   0.00000211          1
  16. 3 乌桕   0.00000329          1
  17. 4 乌桕   0.00000437          1
  18. 5 乌桕   0.00000147          1
复制代码
提示我改用reframe函数,但修改后,根本没有分组计算,而是对原数据每一行分开进行了处理。请问是不是我的定义函数哪里需要修改呢?求大神帮助~谢谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:arise Summa aris rise R语言

沙发
海阔天空7890 发表于 2023-10-13 15:30:58
  1. library(openxlsx)
  2. comm=read.xlsx("comm_island.xlsx")

  3. attach(comm)
  4. comm$branch=as.numeric(branch)
  5. comm$dbh=as.numeric(dbh)
  6. comm$h=as.numeric(h)

  7. unique(comm$sp)
  8. table(comm$sp)

  9. comm=comm[comm$branch==0,] #选择主枝
  10. #前置操作

  11. BA=function(a){
  12. a=comm$dbh
  13. r=a/2
  14. S=pi*r^2
  15. return(S)
  16. }
  17. #计算胸高断面积的函数

  18. total_BA=sum(apply(comm,1,BA))#计算总BA
  19. total_BA=61506864
  20. total_N=nrow(comm)#计算总个体数
  21. total_N=728
  22. #以上正确

  23. relativeBA=function(a){
  24. sum_S=0
  25. a=comm$dbh
  26. r=a/2
  27. S=pi*r^2
  28. sum_S=sum_S+S #计算该物种总胸高断面积(在groupby情况下)
  29. relativeBA=sum_S/total_BA
  30. return(relativeBA)
  31. }
  32. #计算某物种相对胸高断面积

  33. relativeN=function(b){
  34. b=comm$sp
  35. is.character(b)
  36. comm_selected=comm[comm$sp=="b"]
  37. N=nrow(comm_selected)
  38. relativeN=N/total_N
  39. return(relativeN)
  40. }
  41. #计算某物种相对个体数

  42. library(dplyr)

  43. sp_groups=group_by(comm,sp)
  44. #按照sp分组

  45. groups.importance_by_sp=summarise(sp_groups,BA_relative=relativeBA(),N_relative=relativeN())
复制代码

藤椅
海阔天空7890 发表于 2023-10-13 15:31:43
海阔天空7890 发表于 2023-10-13 15:30
原代码如上

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-6 18:17