既存の列に基づいてデータフレームに新しい累積列を作成する

lucaskr

私はこのトピックを作成しました:少し前に既存の列に基づいてデータフレームの新しい列を計算します。私は今、少し区別のある似たようなものを探しています。繰り返しますが、このデータセットがあります。

df=tibble(article=rep("article one",5), 
week=c(1,2,3,4,5), 
sales=20, 
purchase=c(5,0,5,5,0), 
stock=c(50))

# A tibble: 5 x 5
  article      week sales purchase stock
  <chr>       <dbl> <dbl>    <dbl> <dbl>
1 article one     1    20        5    50
2 article one     2    20        0    50
3 article one     3    20        5    50
4 article one     4    20        5    50
5 article one     5    20        0    50

..希望する結果は次のようになります。

# A tibble: 5 x 6
  article      week sales purchase stock stock_over_time
  <chr>       <dbl> <dbl>    <dbl> <dbl>           <dbl>
1 article one     1    20        5    50              50
2 article one     2    20        0    50              30
3 article one     3    20        5    50              15
4 article one     4    20        5    50               0
5 article one     5    20        0    50              -5

したがって、stock_over_timeは次のように計算されます。ここで、を下回ると、売上が差し引かれstock_over_timeますが0、売上の比率(ここでは売上の.25)のみが差し引かれます。

50 - 20 + 0 = 30
30 - 20 + 5 = 15
15 - 20 + 5 = 0
0 - (20 * 1/4) + 0 = -5
akrun

私たちは、使用することができcumsumlag

library(dplyr)
df %>%
  group_by(article) %>%
  mutate(stock_over_time =  lag(stock + cumsum(lead(purchase) - sales),
       default = first(stock)),
     stock_over_time = case_when(stock_over_time < 0 
           ~ 0 - (sales * 1/4) + purchase, TRUE ~ stock_over_time)) %>%
  ungroup

-出力

# A tibble: 5 x 6
#  article      week sales purchase stock stock_over_time
#  <chr>       <dbl> <dbl>    <dbl> <dbl>           <dbl>
#1 article one     1    20        5    50              50
#2 article one     2    20        0    50              30
#3 article one     3    20        5    50              15
#4 article one     4    20        5    50               0
#5 article one     5    20        0    50              -5

@JonSpringが述べたように、それは再帰的なアクションである可能性があり、その場合、これを行うための関数を作成できます

f1 <- function(dat) {
   dat$stock_over_time <- NA_real_
   dat$stock_over_time[1] <- dat$stock[1]
   for(i in 2:nrow(dat)) {
         
      dat$stock_over_time[i] <- dat$stock_over_time[i-1] - 
                      dat$sales[i] + dat$purchase[i]
         if(dat$stock_over_time[i] < 0 ) {
             dat$stock_over_time[i] <- dat$stock_over_time[i-1] - 
                 (dat$sales[i]* 1/4) + dat$purchase[i]
          }  
   }
   return(dat)
 }


unsplit(lapply(split(df, df$article), f1), df$article)
# A tibble: 5 x 6
#  article      week sales purchase stock stock_over_time
#  <chr>       <dbl> <dbl>    <dbl> <dbl>           <dbl>
#1 article one     1    20        5    50              50
#2 article one     2    20        0    50              30
#3 article one     3    20        5    50              15
#4 article one     4    20        5    50               0
#5 article one     5    20        0    50              -5

またはaccumulateから使用できますpurrr

library(purrr)
f1 <- function(x, y, z) {
         tmp <- x - y + z
         if(tmp < 0) {
            tmp <- x - (y* 1/4) + z
            }
         
         return(tmp)
         }

}


df %>% 
  group_by(article) %>%
  mutate(stock_over_time = accumulate2(sales, 
     lead(purchase, default = last(purchase)), f1, .init = first(stock)) %>%
                    flatten_dbl() %>%
                    head(-1)) %>%
  ungroup
# A tibble: 5 x 6
#  article      week sales purchase stock stock_over_time
#  <chr>       <dbl> <dbl>    <dbl> <dbl>           <dbl>
#1 article one     1    20        5    50              50
#2 article one     2    20        0    50              30
#3 article one     3    20        5    50              15
#4 article one     4    20        5    50               0
#5 article one     5    20        0    50              -5

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

既存の列に基づいてデータフレーム内の新しい累積列を計算する

分類Dev

既存の列の条件に基づいて、データフレームに新しい列を作成します

分類Dev

データフレーム内の既存の時間列に基づいて新しい列を作成します

分類Dev

既存の列の値に基づいてpandasデータフレームに新しい列を追加する

分類Dev

既存の列に基づいてデータフレームの新しい列を計算する

分類Dev

既存のデータフレーム行に基づいて新しいデータフレームの列が作成されるように、既存のデータフレームからSparkデータフレームを作成します

分類Dev

R-既存の列と一致する値のインデックスに基づいて新しい列データフレームを作成します

分類Dev

データフレームの2つの列に基づいて新しい列を作成する

分類Dev

データ フレームの他の列に基づいて新しい pandas 列を作成する方法は?

分類Dev

条件を含む文字列に基づいてデータフレームの新しい列を作成する方法

分類Dev

別のデータフレームに基づいてパンダに新しい列を作成する

分類Dev

他の2つのデータフレームの値に基づいて新しい列を作成する

分類Dev

別のデータフレームの列に基づいて、あるデータフレームに新しい列を作成する

分類Dev

複数の列の値に基づいて新しいデータフレーム列を作成します

分類Dev

pandasデータフレームの他の列に基づいて新しい列を作成します

分類Dev

データフレームは、他の列に基づいて新しい列を作成します

分類Dev

列の複数の値に基づいてデータフレームに新しい行を作成します

分類Dev

rの列の累積値に基づいてデータを分割する

分類Dev

既存の変数に基づいてデータフレームに新しい変数を作成します

分類Dev

列の値に基づいて既存のデータフレームに新しい行を追加するにはどうすればよいですか?

分類Dev

他の列の順列に基づいてデータフレームに新しい列を作成するにはどうすればよいですか?

分類Dev

開始日と終了日に基づいてデータフレームに新しい列を作成する

分類Dev

条件に基づいてデータフレームに新しい列を作成する

分類Dev

他の列の値に基づいてデータフレームに新しい列を追加する

分類Dev

複数の列の値に基づいてデータフレームに新しい列を追加する

分類Dev

別のデータフレームとの一致に基づいて、データフレームに新しい列を作成する

分類Dev

既存の文字ベクトルに基づいて、Rデータフレームに新しい文字列を作成します

分類Dev

別のデータフレームの日付条件に基づいて新しい列を作成します

分類Dev

空白行の列に基づいてデータフレームに新しい列を追加する

Related 関連記事

  1. 1

    既存の列に基づいてデータフレーム内の新しい累積列を計算する

  2. 2

    既存の列の条件に基づいて、データフレームに新しい列を作成します

  3. 3

    データフレーム内の既存の時間列に基づいて新しい列を作成します

  4. 4

    既存の列の値に基づいてpandasデータフレームに新しい列を追加する

  5. 5

    既存の列に基づいてデータフレームの新しい列を計算する

  6. 6

    既存のデータフレーム行に基づいて新しいデータフレームの列が作成されるように、既存のデータフレームからSparkデータフレームを作成します

  7. 7

    R-既存の列と一致する値のインデックスに基づいて新しい列データフレームを作成します

  8. 8

    データフレームの2つの列に基づいて新しい列を作成する

  9. 9

    データ フレームの他の列に基づいて新しい pandas 列を作成する方法は?

  10. 10

    条件を含む文字列に基づいてデータフレームの新しい列を作成する方法

  11. 11

    別のデータフレームに基づいてパンダに新しい列を作成する

  12. 12

    他の2つのデータフレームの値に基づいて新しい列を作成する

  13. 13

    別のデータフレームの列に基づいて、あるデータフレームに新しい列を作成する

  14. 14

    複数の列の値に基づいて新しいデータフレーム列を作成します

  15. 15

    pandasデータフレームの他の列に基づいて新しい列を作成します

  16. 16

    データフレームは、他の列に基づいて新しい列を作成します

  17. 17

    列の複数の値に基づいてデータフレームに新しい行を作成します

  18. 18

    rの列の累積値に基づいてデータを分割する

  19. 19

    既存の変数に基づいてデータフレームに新しい変数を作成します

  20. 20

    列の値に基づいて既存のデータフレームに新しい行を追加するにはどうすればよいですか?

  21. 21

    他の列の順列に基づいてデータフレームに新しい列を作成するにはどうすればよいですか?

  22. 22

    開始日と終了日に基づいてデータフレームに新しい列を作成する

  23. 23

    条件に基づいてデータフレームに新しい列を作成する

  24. 24

    他の列の値に基づいてデータフレームに新しい列を追加する

  25. 25

    複数の列の値に基づいてデータフレームに新しい列を追加する

  26. 26

    別のデータフレームとの一致に基づいて、データフレームに新しい列を作成する

  27. 27

    既存の文字ベクトルに基づいて、Rデータフレームに新しい文字列を作成します

  28. 28

    別のデータフレームの日付条件に基づいて新しい列を作成します

  29. 29

    空白行の列に基づいてデータフレームに新しい列を追加する

ホットタグ

アーカイブ