簡體   English   中英

從另一個中減去因子水平

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM