[英]Subtracting factor level from another
給定以下數據框:
set.seed(42)
test <- data.frame(tb = c(rep("top", 5), rep("bottom", 5)),
name = rep(c("q1", "q2", "q3", "q4", "q5"), 2),
values = rnorm(10, 1))
我想從相應的(頂部)值中減去每個“名稱”(底部)級別。 例如:頂部 q1 - 底部 q1 = 1.4770829,頂部 q2 - 底部 q2 = -2.0762202 等。
我怎樣才能產生以下結果? 實際上,“名稱”的級別將遠遠超過五級。
q1 1.4770829
q2 -2.0762202
q3 0.4577874
q4 -1.3855611
q5 0.4669824
您可以重塑數據並減去兩列。
library(dplyr)
library(tidyr)
test %>%
pivot_wider(names_from = tb, values_from = values) %>%
mutate(diff = top - bottom)
# name top bottom diff
# <chr> <dbl> <dbl> <dbl>
#1 q1 2.37 0.894 1.48
#2 q2 0.435 2.51 -2.08
#3 q3 1.36 0.905 0.458
#4 q4 1.63 3.02 -1.39
#5 q5 1.40 0.937 0.467
另一種方法是 -
test %>%
arrange(name, tb) %>%
group_by(name) %>%
summarise(values = diff(values))
# name values
# <chr> <dbl>
#1 q1 1.48
#2 q2 -2.08
#3 q3 0.458
#4 q4 -1.39
#5 q5 0.467
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.