R 如何为分组表进行变异
我有这样的abc表R 如何为分组表进行变异,r,dplyr,mutate,R,Dplyr,Mutate,我有这样的abc表 > abc country date count A 2020-03-01 1 A 2020-03-02 2 A 2020-03-03 3 B 2020-03-01 2 B 2020-03-02 5 B 2020-03-03 10 C 2020-03-01 1 C 2020-03-02 3 C 2020-
> abc
country date count
A 2020-03-01 1
A 2020-03-02 2
A 2020-03-03 3
B 2020-03-01 2
B 2020-03-02 5
B 2020-03-03 10
C 2020-03-01 1
C 2020-03-02 3
C 2020-03-03 6
我想把“abc”表改成“rate”,意思是“x天的计数/(x-1)-天的计数”
像这样
> abc
country date count rate
A 2020-03-01 1 NA
A 2020-03-02 2 2
A 2020-03-03 3 1.5
B 2020-03-01 2 NA
B 2020-03-02 5 2.5
B 2020-03-03 10 2
C 2020-03-01 1 NA
C 2020-03-02 3 3
C 2020-03-03 6 2
我怎样才能做到
等待您的解决方案:)您可以在
dplyr
中使用lag
library(dplyr)
abc %>% group_by(country) %>% mutate(rate = count/lag(count))
# country date count rate
# <fct> <fct> <int> <dbl>
#1 A 2020-03-01 1 NA
#2 A 2020-03-02 2 2
#3 A 2020-03-03 3 1.5
#4 B 2020-03-01 2 NA
#5 B 2020-03-02 5 2.5
#6 B 2020-03-03 10 2
#7 C 2020-03-01 1 NA
#8 C 2020-03-02 3 3
#9 C 2020-03-03 6 2
library(dplyr)
abc %>%
group_by(country) %>%
mutate(rate = c(NA, count[-n()]/count[-1]))
或在底端R中的头部
/尾部
,以执行此操作
abc$rate <- with(abc, ave(count, country, FUN = function(x)
c(NA, tail(x, -1)/head(x, -1))))
abc$rate带dplyr
library(dplyr)
abc %>% group_by(country) %>% mutate(rate = count/lag(count))
# country date count rate
# <fct> <fct> <int> <dbl>
#1 A 2020-03-01 1 NA
#2 A 2020-03-02 2 2
#3 A 2020-03-03 3 1.5
#4 B 2020-03-01 2 NA
#5 B 2020-03-02 5 2.5
#6 B 2020-03-03 10 2
#7 C 2020-03-01 1 NA
#8 C 2020-03-02 3 3
#9 C 2020-03-03 6 2
library(dplyr)
abc %>%
group_by(country) %>%
mutate(rate = c(NA, count[-n()]/count[-1]))
或使用data.table
library(data.table)
setDT(abc)[, rate := count/shift(count), country]
library(data.table)
setDT(abc)[, rate := c(NA, count[.N]/count[-1]), country]
它正在工作!但它必须改变分子和分母。无论如何,谢谢你:)