グループ化に基づいてデータフレーム内の最新の非NA値を抽出する

ヤンドル

次のようなデータフレームがあります。

 Year   Day  ID   V1  V2 .... 
 2003   35  1102  3   6
 2003   35  1103  5   NA
 2003   35  1104  8   100
 .....
 2003   40  1102  NA  8
 2003   40  1103  NA  10
 2003   40  1104  9   NA
 .....
 .....
 2018   49  1104  5   NA
 .....
 2018   50  1102  3   6
 2018   50  1103  7   NA
 2018   50  1104  NA  100

年とIDの組み合わせごとに、V1、V2 ...の最新の(日列ごとの高い値)非NA値を抽出するデータフレームを作成したいと思います。上記のデータセットに基づいて、年について= 2018およびID = 1104、V1 = 5(日= 49)およびV2 = 100(日= 50)を抽出したいと思います。その年とIDの組み合わせのすべての値がNAの場合、NAを返します。

ロナックシャー

DayVn列に基づいて最新の非NA値を提供する関数を作成できます

get_last_non_NA_value <- function(x) {
   x[which.max(cumsum(!is.na(x)))]
}

次に、その関数をそれぞれに適用しYearID

library(dplyr)

df %>%
  group_by(Year, ID) %>%
  summarise_at(vars(V1:V2), funs(get_last_non_NA_value(.[order(Day)])))


#    Year  ID    V1    V2
#  <int> <int> <int> <int>
#1  2003  1102     3     8
#2  2003  1103     5    10
#3  2003  1104     9   100
#4  2018  1102     3     6
#5  2018  1103     7    NA
#6  2018  1104     5   100

編集

Day各値に対応するものも抽出する場合は、関数を変更して、両方の値をコンマ区切りの文字列として返すことができます。

get_last_non_NA_value <- function(x, y) {
   ind <- which.max(cumsum(!is.na(x[order(y)])))
   paste(x[ind], y[ind], sep = ",")
}

次に、を使用cSplitして、これらのコンマ区切り値を異なる列に区切ります。

library(dplyr)
library(splitstackshape)
cols <- c("V1", "V2")

df %>%
 group_by(Year, ID) %>%
 summarise_at(cols, funs(get_last_non_NA_value(., Day))) %>%
 cSplit(cols) %>%
 rename_at(vars(contains("_1")), funs(sub("_1", "_last_value", .))) %>%
 rename_at(vars(contains("_2")), funs(sub("_2", "_days", .)))


#   Year   ID V1_last_value V1_days V2_last_value V2_days
#1: 2003 1102             3      35             8      40
#2: 2003 1103             5      35            10      40
#3: 2003 1104             9      40           100      35
#4: 2018 1102             3      50             6      50
#5: 2018 1103             7      50            NA      50
#6: 2018 1104             5      49           100      50

rename_atパーツは、それが保持する値をよりよく理解するために列の名前を変更することに注意してください。列の名前を変更することに興味がない場合は、そのパーツをスキップできます。

データ

df <- structure(list(Year = c(2003L, 2003L, 2003L, 2003L, 2003L, 2003L, 
2018L, 2018L, 2018L, 2018L), Day = c(35L, 35L, 35L, 40L, 40L, 
40L, 49L, 50L, 50L, 50L), ID = c(1102L, 1103L, 1104L, 1102L, 
1103L, 1104L, 1104L, 1102L, 1103L, 1104L), V1 = c(3L, 5L, 8L, 
NA, NA, 9L, 5L, 3L, 7L, NA), V2 = c(6L, NA, 100L, 8L, 10L, NA, 
NA, 6L, NA, 100L)), .Names = c("Year", "Day", "ID", "V1", "V2"
), class = "data.frame", row.names = c(NA, -10L))

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

2つの日時値に基づいてデータフレームをグループ化する

分類Dev

ファイルの起点に基づいてデータフレーム内の値をグループ化する

分類Dev

別のデータフレームの値に基づいてデータフレームエントリをグループ化する

分類Dev

共通のキーに基づいてパンダのデータフレームをグループ化する

分類Dev

tidyverseを使用して、別のデータフレームからのグループ化された値の範囲に基づいて、データフレームからグループ化された値を抽出します

分類Dev

Pythonの列の類似性に基づいてデータフレームをグループ化する

分類Dev

パンダは、特定の列の値に基づいてデータフレーム内の行をグループ化します

分類Dev

グループ化されたデータフレーム内の別の変数の条件に基づいて変数から値を返す方法は?

分類Dev

連続する値に基づいてデータフレームをグループ化する

分類Dev

連続する値に基づいてデータフレームをグループ化する

分類Dev

別のデータフレームに基づいてアイテムをグループ化するデータフレームを構築します

分類Dev

データフレーム列の値を値の数に基づいて設定し、グループ化する

分類Dev

一意のIDごとに最新のタイムスタンプに基づいてデータフレームをフィルタリングする

分類Dev

複数の列のNAに基づいてデータフレームをフィルタリングする

分類Dev

別のデータフレームに基づいてデータフレームの列をグループ化する

分類Dev

データフレーム内の別のセル値に基づいてセル値を変更する

分類Dev

グループ化されたデータフレームの以前の値に基づいて結果を決定する

分類Dev

セル内の値の数に基づいてRのデータフレームを再形成する

分類Dev

列の値に基づいてデータフレームの行をフィルタリングする

分類Dev

行の値の頻度に基づいてデータフレームをフィルタリングする

分類Dev

複数の基準に基づいてデータフレームをグループに分類する方法

分類Dev

データフレーム内の変数グループに基づいて行を並べ替える

分類Dev

pandasデータフレームの他のインデックス値に基づいてインデックス値をグループ化します

分類Dev

条件に基づいてパンダのデータフレームをグループ化しますか?

分類Dev

列内の文字列に基づいてデータフレームをフィルタリングする

分類Dev

ループ内の行番号に基づいて個別のデータフレームを作成する方法

分類Dev

別の列のnull値に基づいてデータフレーム列の値をフィルタリングするpythonデータフレーム

分類Dev

別の列のnull値に基づいてデータフレーム列の値をフィルタリングするpythonデータフレーム

分類Dev

Pythonで配列の値に基づいてデータフレームをフィルタリングする

Related 関連記事

  1. 1

    2つの日時値に基づいてデータフレームをグループ化する

  2. 2

    ファイルの起点に基づいてデータフレーム内の値をグループ化する

  3. 3

    別のデータフレームの値に基づいてデータフレームエントリをグループ化する

  4. 4

    共通のキーに基づいてパンダのデータフレームをグループ化する

  5. 5

    tidyverseを使用して、別のデータフレームからのグループ化された値の範囲に基づいて、データフレームからグループ化された値を抽出します

  6. 6

    Pythonの列の類似性に基づいてデータフレームをグループ化する

  7. 7

    パンダは、特定の列の値に基づいてデータフレーム内の行をグループ化します

  8. 8

    グループ化されたデータフレーム内の別の変数の条件に基づいて変数から値を返す方法は?

  9. 9

    連続する値に基づいてデータフレームをグループ化する

  10. 10

    連続する値に基づいてデータフレームをグループ化する

  11. 11

    別のデータフレームに基づいてアイテムをグループ化するデータフレームを構築します

  12. 12

    データフレーム列の値を値の数に基づいて設定し、グループ化する

  13. 13

    一意のIDごとに最新のタイムスタンプに基づいてデータフレームをフィルタリングする

  14. 14

    複数の列のNAに基づいてデータフレームをフィルタリングする

  15. 15

    別のデータフレームに基づいてデータフレームの列をグループ化する

  16. 16

    データフレーム内の別のセル値に基づいてセル値を変更する

  17. 17

    グループ化されたデータフレームの以前の値に基づいて結果を決定する

  18. 18

    セル内の値の数に基づいてRのデータフレームを再形成する

  19. 19

    列の値に基づいてデータフレームの行をフィルタリングする

  20. 20

    行の値の頻度に基づいてデータフレームをフィルタリングする

  21. 21

    複数の基準に基づいてデータフレームをグループに分類する方法

  22. 22

    データフレーム内の変数グループに基づいて行を並べ替える

  23. 23

    pandasデータフレームの他のインデックス値に基づいてインデックス値をグループ化します

  24. 24

    条件に基づいてパンダのデータフレームをグループ化しますか?

  25. 25

    列内の文字列に基づいてデータフレームをフィルタリングする

  26. 26

    ループ内の行番号に基づいて個別のデータフレームを作成する方法

  27. 27

    別の列のnull値に基づいてデータフレーム列の値をフィルタリングするpythonデータフレーム

  28. 28

    別の列のnull値に基づいてデータフレーム列の値をフィルタリングするpythonデータフレーム

  29. 29

    Pythonで配列の値に基づいてデータフレームをフィルタリングする

ホットタグ

アーカイブ