两个事件之间的百分比差异
Percentage difference between two events
我有一个如下所示的数据框:
df1 <-
ID event CONC
1 1 5
1 2 10
3 1 7
3 2 10
对于每一行,我想计算两个事件之间浓度的百分比差异并将其添加到新列中。
例如:ID=1
diff <- (10-5)*100
我需要有关如何为每一行指定 (CONCrow2-CONCrow1) 的帮助。然后我可以使用以下内容通过 ID 应用它:
df2 <- df1 %>%
group_by(ID) %>%
mutate (percent = ....)
你可以试试
library(dplyr)
df1 %>%
group_by(ID) %>%
mutate(percent=100*(CONC-lag(CONC)))
或使用base R
transform(df1, percent=ave(CONC, ID, FUN=function(x) 100*c(NA, diff(x))))
或使用data.table
library(data.table)
setDT(df1)[, percent := 100*c(NA, diff(CONC)), ID]
更新
根据@Jan Gorecki 的评论,shift
是 data.table_1.9.5
(开发版)
中可用的新选项
setDT(df1)[,percent := 100*(CONC - shift(CONC)), by=ID][]
我有一个如下所示的数据框:
df1 <-
ID event CONC
1 1 5
1 2 10
3 1 7
3 2 10
对于每一行,我想计算两个事件之间浓度的百分比差异并将其添加到新列中。
例如:ID=1
diff <- (10-5)*100
我需要有关如何为每一行指定 (CONCrow2-CONCrow1) 的帮助。然后我可以使用以下内容通过 ID 应用它:
df2 <- df1 %>%
group_by(ID) %>%
mutate (percent = ....)
你可以试试
library(dplyr)
df1 %>%
group_by(ID) %>%
mutate(percent=100*(CONC-lag(CONC)))
或使用base R
transform(df1, percent=ave(CONC, ID, FUN=function(x) 100*c(NA, diff(x))))
或使用data.table
library(data.table)
setDT(df1)[, percent := 100*c(NA, diff(CONC)), ID]
更新
根据@Jan Gorecki 的评论,shift
是 data.table_1.9.5
(开发版)
setDT(df1)[,percent := 100*(CONC - shift(CONC)), by=ID][]