Rでは、データフレームの行に対して関数を実行し、結果を新しい日付フレームに結合します

アダムエルズワース

私は正しい答えの領域にいると感じていますが、私の一生の間、これを行う方法を理解することはできません。製品元帳にエントリを取得し、製品トランザクションの生涯月ごとに行/ケースがあるデータの形状を変更したいと思います。

注意として、これらの元帳エントリが取り消されたり返金されたりすることがあります(date_from> date_thruがあります)。以下のデータフレームに、新規購入と払い戻しの例があります。また、月ごとの経常収益(mrr)のみを考慮しているため、取引日は常に作成された月の最初になるように事前にクリーニングされています。

サンプルdf:

user <- c("1001", "1002")
line_item <- c("abc123", "def456")
date_from <- as.Date(c("2015-01-01", "2015-06-01"), "%Y-%m-%d")
date_thru <- as.Date(c("2015-04-01", "2014-12-01"), "%Y-%m-%d")
mrr <- c(2.22, -4.44)
df <- cbind.data.frame(user, line_item, date_from, date_thru, mrr)

出力:

  user line_item  date_from  date_thru   mrr
1 1001    abc123 2015-01-01 2015-04-01  2.22
2 1002    def456 2015-06-01 2014-12-01 -4.44

望ましい結果:

user    line_item       month           mrr
1001    abc123          2015-01-01    2.22
1001    abc123          2015-02-01    2.22
1001    abc123          2015-03-01    2.22
1001    abc123          2015-04-01    2.22
1002    def456          2015-06-01    -4.44
1002    def456          2015-05-01    -4.44
1002    def456          2015-04-01    -4.44
1002    def456          2015-02-01    -4.44
1002    def456          2015-01-01    -4.44
1002    def456          2014-12-01    -4.44

monthような関数をベクトル化seq(date_from, date_thru, by="months")し、結果のすべてのベクトルを上記のように1つのdfに再度結合して、新しいを作成するにはどうすればよいですか?

私がしようとしてきたlapplydplyr::mutateseqし、それらを一緒に正常に動作させることはできません。

前もって感謝します!

Lefkios Paikousis

特別な力明らかにするだけtidyrcompletefill機能を

library(tidyverse)

df %>% 
  # turn into a long format to handle the dates as one variable
  gather(key, date, date_from:date_thru) %>% 
  # group the dataframe to apply operations separately on each user
  group_by(user) %>% 
  # now complete the dataset with the implicit dates within the range of dates
  # Note the consideration of: date_from > date_to with 'min' and 'max'
  complete(date = seq.Date(from = min(date),to = max(date),by = "month") ) %>% 
  #now fill in the missing 'mrr' 
  fill(mrr, line_item)


# A tibble: 11 x 5
# Groups:   user [2]
   user  date       line_item   mrr key      
   <fct> <date>     <fct>     <dbl> <chr>    
 1 1001  2015-01-01 abc123     2.22 date_from
 2 1001  2015-02-01 abc123     2.22 <NA>     
 3 1001  2015-03-01 abc123     2.22 <NA>     
 4 1001  2015-04-01 abc123     2.22 date_thru
 5 1002  2014-12-01 def456    -4.44 date_thru
 6 1002  2015-01-01 def456    -4.44 <NA>     
 7 1002  2015-02-01 def456    -4.44 <NA>     
 8 1002  2015-03-01 def456    -4.44 <NA>     
 9 1002  2015-04-01 def456    -4.44 <NA>     
10 1002  2015-05-01 def456    -4.44 <NA>     
11 1002  2015-06-01 def456    -4.44 date_from

key変数を削除したい場合%>% select(-key)は、fill何らかの理由で保持したい場合でも、終了後次を追加てください...

PS @ Gによる関数作成の巧妙なトリックが本当に気に入りました。グロタンディークsignへのハンドルdate_from>date_to

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

R-大きなデータフレームをいくつかの小さな日付フレームに分割し、それぞれでファジー結合を実行して、単一のデータフレームに出力します

分類Dev

データフレームのすべての列に対してforループを実行し、結果を個別のデータフレームまたは行列として返すにはどうすればよいですか?

分類Dev

データフレームgroupByは、集計関数の結果に基づいて、対応する行の値を取得します

分類Dev

複数の列に基づいてRのデータフレーム行を結合します

分類Dev

aplucterの結果をRのデータフレームに結合します

分類Dev

リストをサブセット化し、各サブセットで関数を実行して、結果をデータフレームに配置します

分類Dev

パンダ: 2 行ごとに比較し、結果を新しいデータフレームに出力します

分類Dev

データフレーム内の値に対して関数を実行し、

分類Dev

パンダ-適用関数の結果のデータフレームを新しいデータフレームにマージします

分類Dev

データフレームのリストで発生をカウントし、結果をRの新しいデータフレームに保存します

分類Dev

条件付き行データを新しいデータフレームに結合する

分類Dev

データフレームの列を新しいデータフレームに結合します

分類Dev

show()がデータフレームに対して行うように、spark / scalaを使用して列関数からの結果を表示する方法

分類Dev

Python:キーのすべての値を1つの行に結合してCSVを解析し、新しいデータフレームを保存します

分類Dev

Apache Spark:データフレームの結果(結合のあるデータフレーム)を保存して、データフレームに対するアクションが結果を変更しないようにする方法は?

分類Dev

R-文字列のGrepデータフレームであり、各行の検索結果に基づいて条件付きで新しい値を追加します

分類Dev

他の列の結果に基づいて、データフレームに新しい列を追加します

分類Dev

関数を作成し、それをlapplyに渡して、データフレームの各行に対して実行しようとしています。

分類Dev

R-データフレームを計算し、結果を新しい列に割り当てます

分類Dev

列の関数の結果に基づいてPandasデータフレームをスライスします

分類Dev

R-データフレームの2列ごとに合計し、結果を最後の新しい列に貼り付けます

分類Dev

複数のモデルを実行し、モデルの比較結果をrのデータフレームに保存します

分類Dev

行の出現に基づいてデータフレームの結果を選択します

分類Dev

purrrのmap関数を使用して、行ごとのprop.testsを実行し、結果をデータフレームに追加するにはどうすればよいですか?

分類Dev

R-キーを使用してデータフレームを結合し、次におおよその日付

分類Dev

同じデータフレームで列を合計して結果を行として追加するにはどうすればよいですか?

分類Dev

groupby操作の結果として行を元のデータフレームに挿入します

分類Dev

データフレーム内の2つの列を結合し、Rの既存のデータフレーム内に新しい列を作成します

分類Dev

パンダデータフレームの列に対して関数を実行する効率的な方法は?

Related 関連記事

  1. 1

    R-大きなデータフレームをいくつかの小さな日付フレームに分割し、それぞれでファジー結合を実行して、単一のデータフレームに出力します

  2. 2

    データフレームのすべての列に対してforループを実行し、結果を個別のデータフレームまたは行列として返すにはどうすればよいですか?

  3. 3

    データフレームgroupByは、集計関数の結果に基づいて、対応する行の値を取得します

  4. 4

    複数の列に基づいてRのデータフレーム行を結合します

  5. 5

    aplucterの結果をRのデータフレームに結合します

  6. 6

    リストをサブセット化し、各サブセットで関数を実行して、結果をデータフレームに配置します

  7. 7

    パンダ: 2 行ごとに比較し、結果を新しいデータフレームに出力します

  8. 8

    データフレーム内の値に対して関数を実行し、

  9. 9

    パンダ-適用関数の結果のデータフレームを新しいデータフレームにマージします

  10. 10

    データフレームのリストで発生をカウントし、結果をRの新しいデータフレームに保存します

  11. 11

    条件付き行データを新しいデータフレームに結合する

  12. 12

    データフレームの列を新しいデータフレームに結合します

  13. 13

    show()がデータフレームに対して行うように、spark / scalaを使用して列関数からの結果を表示する方法

  14. 14

    Python:キーのすべての値を1つの行に結合してCSVを解析し、新しいデータフレームを保存します

  15. 15

    Apache Spark:データフレームの結果(結合のあるデータフレーム)を保存して、データフレームに対するアクションが結果を変更しないようにする方法は?

  16. 16

    R-文字列のGrepデータフレームであり、各行の検索結果に基づいて条件付きで新しい値を追加します

  17. 17

    他の列の結果に基づいて、データフレームに新しい列を追加します

  18. 18

    関数を作成し、それをlapplyに渡して、データフレームの各行に対して実行しようとしています。

  19. 19

    R-データフレームを計算し、結果を新しい列に割り当てます

  20. 20

    列の関数の結果に基づいてPandasデータフレームをスライスします

  21. 21

    R-データフレームの2列ごとに合計し、結果を最後の新しい列に貼り付けます

  22. 22

    複数のモデルを実行し、モデルの比較結果をrのデータフレームに保存します

  23. 23

    行の出現に基づいてデータフレームの結果を選択します

  24. 24

    purrrのmap関数を使用して、行ごとのprop.testsを実行し、結果をデータフレームに追加するにはどうすればよいですか?

  25. 25

    R-キーを使用してデータフレームを結合し、次におおよその日付

  26. 26

    同じデータフレームで列を合計して結果を行として追加するにはどうすればよいですか?

  27. 27

    groupby操作の結果として行を元のデータフレームに挿入します

  28. 28

    データフレーム内の2つの列を結合し、Rの既存のデータフレーム内に新しい列を作成します

  29. 29

    パンダデータフレームの列に対して関数を実行する効率的な方法は?

ホットタグ

アーカイブ