对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)))

我现在却想做同样的事情,只是累计求和跨越国家、穿山甲世系和日期。我试图在上面的函数中添加另一个向量,但似乎你只能输入一个索引输入和一个向量输入。我得到这个错误:

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

有没有人有任何想法如何使用cumsum在应用跨多个向量(国家,穿山甲血统,日期?

如果有多个组,则将其包装在list中,但请注意,tapply在汇总函数中,当我们指定cumsum时,它可以拆分。

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

但是,使用ave要容易得多,即如果我们想创建一个新列,只需使用ave就可以避免unlist等的麻烦。

ave(date_country$n, date_country$country, 
date_country$pangolin_lineage, FUN = cumsum)
#[1] 1 2 3 1 4 1

相关内容

  • 没有找到相关文章

最新更新