微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对 R 中的多个向量使用 tapply 和 cumsum 函数

如何解决对 R 中的多个向量使用 tapply 和 cumsum 函数

我有一个包含四列的数据框。

  country       date       pangolin_lineage       n      cum_country
1 Albania    2020-09-05      B.1.236              1           1
2 Algeria    2020-03-02      B.1                  2           2
3 Algeria    2020-03-08      B.1                  1           3
4 Algeria    2020-06-09      B.1.1.119            1           4
5 Algeria    2020-06-15      B.1                  1           5
6 Algeria    2020-06-15      B.1.36               1           6

我希望计算不同国家和日期的 n 的累积总和。我可以用这个代码做到这一点:

date_country$cum_country <- as.numeric(unlist(tapply(date_country$n,date_country$country,cumsum)))

然而,我现在想做同样的事情,但需要跨国家/地区、pangolin_lineage 和日期的累计总和。我试图在上面的函数添加一个向量,但似乎你只能输入一个索引输入和一个向量输入用于 tapply。我收到此错误

date_country$cum_country_pangol <- as.numeric(unlist(tapply(date_country$n,date_country$pangolin_lineage,cumsum)))
Error in match.fun(FUN) : 
  'date_country$pangolin_lineage' is not a function,character or symbol

有谁知道如何在多个向量(国家、pangolin_lineage、日期)的 tapply 中使用 cumsum?

解决方法

如果有多个组,将其包裹在list中,但请注意tapply在汇总函数中,当我们指定cumsum这样的函数时,它可能会分裂。

 tapply(date_country$n,list(date_country$country,date_country$pangolin_lineage),cumsum))

但是,使用 ave 更容易,即如果我们想创建一个新列,只需使用 unlist

就可以避免 ave 等的麻烦
ave(date_country$n,date_country$country,date_country$pangolin_lineage,FUN = cumsum)
#[1] 1 2 3 1 4 1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。