簡體   English   中英

group_by 之后行之間的值差異

[英]Difference in values between rows after group_by

我想計算上一行之后下一行的值差異。 但是,我收到此錯誤:

mutate()錯誤:! 計算..1 = across(where(is.numeric), diff)時出現問題。 ℹ 錯誤發生在第 1 組:vs = 0 由across()中的錯誤引起:! 計算列mpg時出現問題。 dplyr_internal_error()中的錯誤引起:運行rlang::last_error()以查看錯誤發生的位置。

這是我嘗試過的:

mtcars %>% group_by(vs) %>% mutate(across(where(is.numeric), diff))

這似乎可以解決問題:

mtcars %>% group_by(vs) %>% aggregate(. ~ vs, data=., diff) %>% as.data.frame() %>% unnest()

#//--
# A tibble: 30 × 11
      vs    mpg   cyl   disp    hp    drat      wt    qsec    am  gear  carb
   <dbl>  <dbl> <dbl>  <dbl> <dbl>   <dbl>   <dbl>   <dbl> <dbl> <dbl> <dbl>
 1     0  0         0    0       0  0       0.255   0.560      0     0     0
 2     0 -2.3       2  200      65 -0.75    0.565   0         -1    -1    -2
 3     0 -4.4       0    0      70  0.0600  0.130  -1.18       0     0     2
 4     0  2.10      0  -84.2   -65 -0.140   0.500   1.56       0     0    -1
 5     0  0.900     0    0       0  0      -0.340   0.200      0     0     0
 6     0 -2.10      0    0       0  0       0.0500  0.400      0     0     0
 7     0 -4.8       0  196.     25 -0.140   1.47   -0.0200     0     0     1
 8     0  0         0  -12      10  0.0700  0.174  -0.160      0     0     0
 9     0  4.3       0  -20      15  0.23   -0.0790 -0.400      0     0     0
10     0  0.800     0 -122     -80 -0.47   -1.82   -0.550      0     0    -2
# … with 20 more rows

您可以使用lag明確定義計算。 或者您可以在 base R 中執行此操作:

library(tidyverse)

#tidyverse
mtcars %>% 
  group_by(vs) %>% 
  mutate(across(where(is.numeric), ~.-lag(., default = first(.)))) |>
  arrange(vs)
#> # A tibble: 32 x 11
#> # Groups:   vs [2]
#>       mpg   cyl  disp    hp    drat      wt    qsec    vs    am  gear  carb
#>     <dbl> <dbl> <dbl> <dbl>   <dbl>   <dbl>   <dbl> <dbl> <dbl> <dbl> <dbl>
#>  1  0         0   0       0  0       0       0          0     0     0     0
#>  2  0         0   0       0  0       0.255   0.560      0     0     0     0
#>  3 -2.3       2 200      65 -0.75    0.565   0          0    -1    -1    -2
#>  4 -4.4       0   0      70  0.0600  0.130  -1.18       0     0     0     2
#>  5  2.10      0 -84.2   -65 -0.140   0.500   1.56       0     0     0    -1
#>  6  0.900     0   0       0  0      -0.340   0.200      0     0     0     0
#>  7 -2.10      0   0       0  0       0.0500  0.400      0     0     0     0
#>  8 -4.8       0 196.     25 -0.140   1.47   -0.0200     0     0     0     1
#>  9  0         0 -12      10  0.0700  0.174  -0.160      0     0     0     0
#> 10  4.3       0 -20      15  0.23   -0.0790 -0.400      0     0     0     0
#> # ... with 22 more rows

#base R
by(mtcars, mtcars$vs, \(x) apply(x, 2, diff)) |>
  do.call(what = rbind.data.frame)
#>                         mpg cyl   disp  hp  drat     wt  qsec vs am gear carb
#> 0.Mazda RX4 Wag         0.0   0    0.0   0  0.00  0.255  0.56  0  0    0    0
#> 0.Hornet Sportabout    -2.3   2  200.0  65 -0.75  0.565  0.00  0 -1   -1   -2
#> 0.Duster 360           -4.4   0    0.0  70  0.06  0.130 -1.18  0  0    0    2
#> 0.Merc 450SE            2.1   0  -84.2 -65 -0.14  0.500  1.56  0  0    0   -1
#> 0.Merc 450SL            0.9   0    0.0   0  0.00 -0.340  0.20  0  0    0    0
#> 0.Merc 450SLC          -2.1   0    0.0   0  0.00  0.050  0.40  0  0    0    0
#> 0.Cadillac Fleetwood   -4.8   0  196.2  25 -0.14  1.470 -0.02  0  0    0    1
#> 0.Lincoln Continental   0.0   0  -12.0  10  0.07  0.174 -0.16  0  0    0    0
#> 0.Chrysler Imperial     4.3   0  -20.0  15  0.23 -0.079 -0.40  0  0    0    0
#> 0.Dodge Challenger      0.8   0 -122.0 -80 -0.47 -1.825 -0.55  0  0    0   -2
#> 0.AMC Javelin          -0.3   0  -14.0   0  0.39 -0.085  0.43  0  0    0    0
#> 0.Camaro Z28           -1.9   0   46.0  95  0.58  0.405 -1.89  0  0    0    2
#> 0.Pontiac Firebird      5.9   0   50.0 -70 -0.65  0.005  1.64  0  0    0   -2
#> 0.Porsche 914-2         6.8  -4 -279.7 -84  1.35 -1.705 -0.35  0  1    2    0
#> 0.Ford Pantera L      -10.2   4  230.7 173 -0.21  1.030 -2.20  0  0    0    2
#> 0.Ferrari Dino          3.9  -2 -206.0 -89 -0.60 -0.400  1.00  0  0    0    2
#> 0.Maserati Bora        -4.7   2  156.0 160 -0.08  0.800 -0.90  0  0    0    2
#> 1.Hornet 4 Drive       -1.4   2  150.0  17 -0.77  0.895  0.83  0 -1   -1    0
#> 1.Valiant              -3.3   0  -33.0  -5 -0.32  0.245  0.78  0  0    0    0
#> 1.Merc 240D             6.3  -2  -78.3 -43  0.93 -0.270 -0.22  0  0    1    1
#> 1.Merc 230             -1.6   0   -5.9  33  0.23 -0.040  2.90  0  0    0    0
#> 1.Merc 280             -3.6   2   26.8  28  0.00  0.290 -4.60  0  0    0    2
#> 1.Merc 280C            -1.4   0    0.0   0  0.00  0.000  0.60  0  0    0    0
#> 1.Fiat 128             14.6  -2  -88.9 -57  0.16 -1.240  0.57  0  1    0   -3
#> 1.Honda Civic          -2.0   0   -3.0 -14  0.85 -0.585 -0.95  0  0    0    1
#> 1.Toyota Corolla        3.5   0   -4.6  13 -0.71  0.220  1.38  0  0    0   -1
#> 1.Toyota Corona       -12.4   0   49.0  32 -0.52  0.630  0.11  0 -1   -1    0
#> 1.Fiat X1-9             5.8   0  -41.1 -31  0.38 -0.530 -1.11  0  1    1    0
#> 1.Lotus Europa          3.1   0   16.1  47 -0.31 -0.422 -2.00  0  0    1    1
#> 1.Volvo 142E           -9.0   0   25.9  -4  0.34  1.267  1.70  0  0   -1    0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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