基準に基づいて列を合計する

うまい

x、ID、date_timeの3つの列で構成されるデータフレームがあります。「x」列は変数xの記録であり、IDは何が記録されているかを示し、date_timeはいつ記録されているかを示します。以下のデータフレームの一部を参照してください。

このデータフレームから、「Measurement」、「ID」、「Date」、「x_4_10_day」、「Day_total」、「x_4_10_night」、「Night_total」の7つの列を持つ新しいデータフレームを計算したいと思います。

  1. "測定"。この列は、これが特定のIDの測定数を示している必要があります。測定は23:00:00に開始され、翌日の22:59:59まで実行されます。ただし、測定はランダムな時間に開始されるため、最初の測定の期間は24時間ではありません。どちらも最後の測定は24時間ではありません。
  2. 「ID」。特定の測定値のIDを示します
  3. "日付"。この列には、特定の測定値の最後の記録の日付がyyyy.mm.ddの形式で表示されます。
  4. 「x_4_10_day」:測定値は、日(7:00:00-22:59:59)と夜(23:00:00-6:59:59)に分けられます。この列は、特定の測定で1日あたりの合計時間(分単位)xが4〜10(両方を含む)であることを示している必要があります。4〜10のxの記録は、各記録の間に5分があるため、xが4〜10の5分間であると見なすことができます。
  5. 「day_total」:この列は、xが1日に測定された合計時間(分単位)を示す必要があります。xには、減算する必要のある欠落値があります。xの欠落した値は空白のままです。欠落している測定ごとに、合計時間から5分を差し引く必要があります。また、一部の測定は7:00以降に開始されました。
  6. 「x_4_10_night」:この列は、特定の測定でxが毎晩4〜10(両方を含む)であった合計時間(分単位)を示す必要があります。
  7. 「night_total」:この列は、xが夜間に測定された合計時間(分単位)を示す必要があります。xには、減算する必要のある欠落値があります。xの欠落した値は空白のままです。欠落している測定ごとに、合計時間から5分を差し引く必要があります。

一意の測定ごとに行が必要です。これまでのところ、「Measurement」、「ID」、「Date」の列を正しく返すコードがあります。

df1$mydate = as.Date(df1$date_time, format = "%Y.%m.%d %H:%M:%S")
df1$tm <- as.numeric(df1$date_time)
df1$dts <- 86400*as.numeric(df1$mydate)
df2 <- df1 %>% 
group_by(ID,mydate) %>% 
transform(date = case_when(((dts-3600)<tm & tm<(dts+82800)) ~paste0(mydate), ((dts+82800)<=tm) ~paste0(mydate+1) )) %>% 
select(ID,date) %>%   
unique() %>% 
group_by(ID) %>% 
mutate(measurement = row_number())

しかし、私は最後のものを行う方法がわかりません。

期待される出力は次のとおりです。

dummy_output <- read.table(header=TRUE, text ="
                     ID Date        Measurement x_4_10_day Day_total x_4_10_night Night_total
                     12 2020.03.02  1           30         40        0            0
                     12 2020.03.03  2           0          0         45           75
                     13 2020.05.09  1           90         90        0            0
") 

どんな提案でも大歓迎です、ありがとう!

そして、ここにデータがあります:

structure(list(date_time = c("2020.03.02 22:00:17", "2020.03.02 22:05:17", 
"2020.03.02 22:10:17", "2020.03.02 22:35:17", "2020.03.02 22:40:17", 
"2020.03.02 22:45:17", "2020.03.02 22:50:17", "2020.03.02 22:55:17", 
"2020.03.02 23:00:17", "2020.03.02 23:05:17", "2020.03.02 23:10:17", 
"2020.03.02 23:15:17", "2020.03.02 23:20:17", "2020.03.02 23:25:17", 
"2020.03.02 23:30:17", "2020.03.02 23:35:17", "2020.03.02 23:40:17", 
"2020.03.02 23:45:17", "2020.03.02 23:50:17", "2020.03.02 23:55:17", 
"2020.03.03 00:00:17", "2020.03.03 00:55:17", "2020.03.03 01:00:17", 
"2020.03.03 01:05:17", "2020.03.03 01:10:17", "2020.03.03 01:15:17", 
"2020.03.03 01:20:17", "2020.03.03 01:25:17", "2020.05.09 08:39:32", 
"2020.05.09 08:39:32", "2020.05.09 08:39:32", "2020.05.09 08:39:32", 
"2020.05.09 08:39:32", "2020.05.09 08:39:32", "2020.05.09 08:39:32", 
"2020.05.09 08:39:32", "2020.05.09 08:39:32", "2020.05.09 08:39:32", 
"2020.05.09 08:39:32", "2020.05.09 08:39:32", "2020.05.09 08:39:32", 
"2020.05.09 08:39:32", "2020.05.09 08:39:32", "2020.05.09 08:39:32", 
"2020.05.09 08:39:32", "2020.05.09 08:39:32"), id = c(12L, 12L, 
12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 
12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 
13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 
13L, 13L, 13L, 13L, 13L), x = c("7.55", "4.55", "4.55", "12", 
"12", "10", "10", "4.3", "", "", "4.3", "4.3", "4.3", "", "4.3", 
"12", "12", "12", "2", "12", "12", "", "8", "3", "3", "2", "2", 
"", "12", "10", "10", "4.3", "4.3", "4.3", "4.3", "4.3", "4.3", 
"4.3", "4.3", "12", "12", "12", "12", "12", "12", "12")), row.names = c(NA, 
46L), class = "data.frame")
YBS

id=14データフレームに夜の値のみを追加しました。おそらくこれはあなたが探しているものです。期待値が要件に完全に準拠していないことに注意してください。

df11 <- structure(list(date_time = c("2020.03.02 22:00:17", "2020.03.02 22:05:17", 
                             "2020.03.02 22:10:17", "2020.03.02 22:35:17", "2020.03.02 22:40:17", 
                             "2020.03.02 22:45:17", "2020.03.02 22:50:17", "2020.03.02 22:55:17", 
                             "2020.03.02 23:00:17", "2020.03.02 23:05:17", "2020.03.02 23:10:17", 
                             "2020.03.02 23:15:17", "2020.03.02 23:20:17", "2020.03.02 23:25:17", 
                             "2020.03.02 23:30:17", "2020.03.02 23:35:17", "2020.03.02 23:40:17", 
                             "2020.03.02 23:45:17", "2020.03.02 23:50:17", "2020.03.02 23:55:17", 
                             "2020.03.03 00:00:17", "2020.03.03 00:55:17", "2020.03.03 01:00:17", 
                             "2020.03.03 01:05:17", "2020.03.03 01:10:17", "2020.03.03 01:15:17", 
                             "2020.03.03 01:20:17", "2020.03.03 01:25:17", "2020.05.09 08:39:32", 
                             "2020.05.09 08:39:32", "2020.05.09 08:39:32", "2020.05.09 08:39:32", 
                             "2020.05.09 08:39:32", "2020.05.09 08:39:32", "2020.05.09 08:39:32", 
                             "2020.05.09 08:39:32", "2020.05.09 08:39:32", "2020.05.09 08:39:32", 
                             "2020.05.09 08:39:32", "2020.05.09 08:39:32", "2020.05.09 08:39:32", 
                             "2020.05.09 08:39:32", "2020.05.09 08:39:32", "2020.05.09 08:39:32", 
                             "2020.05.09 08:39:32", "2020.05.09 08:39:32", 
                             "2020.03.02 23:45:17", "2020.03.02 23:50:17", "2020.03.02 23:55:17", 
                             "2020.03.03 00:00:17", "2020.03.03 00:55:17", "2020.03.03 01:00:17" 
                             ), 
                      x = c("7.55", "4.55", "4.55", "12", 
                            "12", "10", "10", "4.3", "", "", "4.3", "4.3", "4.3", "", "4.3", 
                            "12", "12", "12", "2", "12", "12", "", "8", "3", "3", "2", "2", 
                            "", "12", "10", "10", "4.3", "4.3", "4.3", "4.3", "4.3", "4.3", 
                            "4.3", "4.3", "12", "12", "12", "12", "12", "12", "12",
                            "12", "10", "10", "4.3", "4.3", "4.3"),
               id = c(12L, 12L, 
                      12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 
                      12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 
                      13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 
                      13L, 13L, 13L, 13L, 13L, 14L, 14L, 14L, 14L, 14L, 14L)), 
               row.names = c(NA, 52L), class = "data.frame")

df11$xn <- as.numeric(df11$x)
df1 <- df11 %>% transform(xmin = ifelse((xn<4 | xn>10 | is.na(xn)),0,5 ),
                          xmint = ifelse(is.na(xn),-5,5 ))
df1$dateTime = as_datetime(df1$date_time, format = "%Y.%m.%d %H:%M:%S")
df1$mydate = as.Date(df1$date_time, format = "%Y.%m.%d %H:%M:%S")

df1$tm <- as.numeric(df1$dateTime)
df1$dts <- 86400*as.numeric(df1$mydate)

df2 <- df1 %>% group_by(id,mydate) %>% 
         transform(date = case_when(((dts-3600)<tm & tm<(dts+82800) )~paste0(mydate),((dts+82800)<=tm)~paste0(mydate+1) )) %>%
         transform(dayrnight = ifelse((tm>=(dts+25200) & tm<(dts+82800) ),'day','night' ) ) %>% 
         group_by(id,date,dayrnight) %>% 
         dplyr::summarise(x_4_10 = sum(xmin), total = sum(xmint)) %>% 
         pivot_wider(id_cols = c(id,date), names_from = dayrnight, values_from = c("x_4_10", "total")) %>% 
         mutate_if(is.numeric , replace_na, replace = 0) %>% 
         group_by(id) %>% mutate(measurement = row_number()) %>% 
         select(id,date,measurement,x_4_10_day,total_day,x_4_10_night,total_night)

> df2
# A tibble: 4 x 7
# Groups:   id [3]
     id date       measurement x_4_10_day total_day x_4_10_night total_night
  <int> <chr>            <int>      <dbl>     <dbl>        <dbl>       <dbl>
1    12 2020-03-02           1         30        40            0           0
2    12 2020-03-03           2          0         0           25          50
3    13 2020-05-09           1         50        90            0           0
4    14 2020-03-03           1          0         0           25          30

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

代替列の基準に基づいて値を合計する

分類Dev

月の基準に基づいて合計を追加する

分類Dev

月の基準に基づいて合計を追加する

分類Dev

基準に基づいて別の列に特定の列の合計を提供するAwkスクリプト

分類Dev

複数の列にわたる基準に基づいて行を合計する

分類Dev

列の基準に基づいて行と列を合計するMysqlクエリ

分類Dev

別の列の基準に基づいて、複数の列の値を合計する数式

分類Dev

基準に基づいて配列数式の左側の列の値を合計するExcel数式

分類Dev

PowerQueryでグループ化する際の基準に基づいて列を合計する

分類Dev

同じテーブル内の異なる基準に基づいて2つの列を合計する

分類Dev

基準に基づいて長さが不均一な配列を乗算し、結果を合計する

分類Dev

条件に基づいて列集計を合計する

分類Dev

rの基準に基づいて変数を計算する

分類Dev

基準に基づいて列テキストを結合/連結する

分類Dev

別の列に基づいて列を合計する

分類Dev

PandasDataFrameの別の列に基づいて列を合計する

分類Dev

列の合計に基づいて列を印刷するAWK

分類Dev

SQL Serverの基準に基づいて、単一の列を複数の列に合計します

分類Dev

条件に基づいて列を合計する

分類Dev

条件に基づいて列の合計を取得する

分類Dev

ヘッダーに基づいて列を合計する

分類Dev

基準に基づいて列の値を更新する

分類Dev

別の列の基準に基づいて値を加算する

分類Dev

列N基準に基づいて行全体を削除する

分類Dev

複数の基準に基づいて異なる合計

分類Dev

基準のあるグループに基づいて連続する月を合計する

分類Dev

基準のあるグループに基づいて連続する月を合計する

分類Dev

Javaの:ハッシュマップを使用して2列目の基準に基づいて1列のすべての値を合計する方法

分類Dev

パンダでgroupbyを使用して、別の列の基準に基づいてパーセンテージ/比率の合計を計算する方法

Related 関連記事

  1. 1

    代替列の基準に基づいて値を合計する

  2. 2

    月の基準に基づいて合計を追加する

  3. 3

    月の基準に基づいて合計を追加する

  4. 4

    基準に基づいて別の列に特定の列の合計を提供するAwkスクリプト

  5. 5

    複数の列にわたる基準に基づいて行を合計する

  6. 6

    列の基準に基づいて行と列を合計するMysqlクエリ

  7. 7

    別の列の基準に基づいて、複数の列の値を合計する数式

  8. 8

    基準に基づいて配列数式の左側の列の値を合計するExcel数式

  9. 9

    PowerQueryでグループ化する際の基準に基づいて列を合計する

  10. 10

    同じテーブル内の異なる基準に基づいて2つの列を合計する

  11. 11

    基準に基づいて長さが不均一な配列を乗算し、結果を合計する

  12. 12

    条件に基づいて列集計を合計する

  13. 13

    rの基準に基づいて変数を計算する

  14. 14

    基準に基づいて列テキストを結合/連結する

  15. 15

    別の列に基づいて列を合計する

  16. 16

    PandasDataFrameの別の列に基づいて列を合計する

  17. 17

    列の合計に基づいて列を印刷するAWK

  18. 18

    SQL Serverの基準に基づいて、単一の列を複数の列に合計します

  19. 19

    条件に基づいて列を合計する

  20. 20

    条件に基づいて列の合計を取得する

  21. 21

    ヘッダーに基づいて列を合計する

  22. 22

    基準に基づいて列の値を更新する

  23. 23

    別の列の基準に基づいて値を加算する

  24. 24

    列N基準に基づいて行全体を削除する

  25. 25

    複数の基準に基づいて異なる合計

  26. 26

    基準のあるグループに基づいて連続する月を合計する

  27. 27

    基準のあるグループに基づいて連続する月を合計する

  28. 28

    Javaの:ハッシュマップを使用して2列目の基準に基づいて1列のすべての値を合計する方法

  29. 29

    パンダでgroupbyを使用して、別の列の基準に基づいてパーセンテージ/比率の合計を計算する方法

ホットタグ

アーカイブ