我想根據 a 的b(A,A;B,B;C,C) 中的組計算百分比差異data.frame。新變數rate應包含c基于時間戳的變化a(即 3 和 7,而較小的數字始終是前一個)。應該是NA,當給定組只有一個時間戳時。
我嘗試使用常用方法,但我總是得到一個零向量。示例資料:
a <- c(3,7,3,7,3,7,3,3,7,3,7,3,7,7)
b <- c("a", "a", "b", "b", "c", "c", "d", "e", "e", "f","f", "g", "g", "h")
c <- runif(14, min=80, max=100)
df <- data.frame(a,b,c)
我嘗試了常見的方法使用group_by,mutate并lag即
df %>% group_by(a,b) %>%
mutate(rate = 100 * (c - lag(c))/lag(c))
我arrange在使用之前也嘗試過lag,但我得到的結果總是0. 我認為這是因為沒有時間序列,這就是我們不能使用lag. 必須有一種簡單的方法來使用常規函式來實作這一點。
uj5u.com熱心網友回復:
如果你lag()用來定義你的比率,你會得到每個 b == 3 的 "NA",當你 group_by "b" 時,b == 7 的正確值。此外,c()是 R 中的原始函式,最好不要使用“c”作為變數的名稱。
這就是你追求的結果嗎?
library(tidyverse)
a <- c(3,7,3,7,3,7,3,3,7,3,7,3,7,7)
b <- c("a", "a", "b", "b", "c", "c", "d", "e", "e", "f","f", "g", "g", "h")
d <- c(80, 100, runif(12, min=80, max=100))
df <- data.frame(a,b,d)
df %>% group_by(b) %>%
mutate(rate = 100 * (d - lag(d, default = NA))/lag(d, default = NA))
#> # A tibble: 14 × 4
#> # Groups: b [8]
#> a b d rate
#> <dbl> <chr> <dbl> <dbl>
#> 1 3 a 80 NA
#> 2 7 a 100 25
#> 3 3 b 88.0 NA
#> 4 7 b 91.1 3.54
#> 5 3 c 95.1 NA
#> 6 7 c 82.7 -13.1
#> 7 3 d 92.6 NA
#> 8 3 e 84.1 NA
#> 9 7 e 91.8 9.20
#> 10 3 f 81.9 NA
#> 11 7 f 93.6 14.4
#> 12 3 g 88.7 NA
#> 13 7 g 80.6 -9.11
#> 14 7 h 99.2 NA
由reprex 包(v2.0.1)于 2021 年 12 月 20 日創建
您也可以更靈活地使用ifelse()'s ,例如,如果您希望 NA 在您擁有單個組的情況下使用 NA 而在 a == 3 的情況下為零:
library(tidyverse)
a <- c(3,7,3,7,3,7,3,3,7,3,7,3,7,7)
b <- c("a", "a", "b", "b", "c", "c", "d", "e", "e", "f","f", "g", "g", "h")
d <- c(80, 100, runif(12, min=80, max=100))
df <- data.frame(a,b,d)
df %>% group_by(b) %>%
mutate(group_number = n()) %>%
mutate(rate = ifelse(group_number == 1, NA, ifelse(a == 7, 100 * (d - lag(d, default = NA))/lag(d, default = NA), 0))) %>%
select(-group_number) %>%
ungroup()
#> # A tibble: 14 × 4
#> a b d rate
#> <dbl> <chr> <dbl> <dbl>
#> 1 3 a 80 0
#> 2 7 a 100 25
#> 3 3 b 95.8 0
#> 4 7 b 83.9 -12.5
#> 5 3 c 87.0 0
#> 6 7 c 81.5 -6.26
#> 7 3 d 97.0 NA
#> 8 3 e 99.1 0
#> 9 7 e 82.6 -16.6
#> 10 3 f 82.3 0
#> 11 7 f 96.0 16.7
#> 12 3 g 99.5 0
#> 13 7 g 93.4 -6.09
#> 14 7 h 86.8 NA
由reprex 包(v2.0.1)于 2021 年 12 月 20 日創建
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/387641.html
上一篇:基于R中的字串向量對一列進行分組并重新排列另一字串列
下一篇:重新排列/組合字典中的資料框
