0

値を抽出したいテーブルに長い時系列があります。

パネルには毎日の観測がありますが、NA もあります。各断面から最後の非 NA 値を新しい時系列に抽出したいと思います。同じ断面に移動し、その断面内のすべての観測値を抽出された値で埋める必要があります。つまり、新しい時系列は、t ごとのデータを含む積み上げ断面で構成されます。

以下の構造の例を作成しました。ここで、x はデータを抽出したいシリーズで、NEW は作成したい新しいシリーズです。

xsection  t       x       NEW
01_00 2000-01-01 146,16 147,2
01_00 2000-01-02 147,2  147,2
01_00 2000-01-03 NA     147,2
02_00 2000-01-01 NA     148,3
02_00 2000-01-02 148,3  148,3
02_00 2000-01-03 NA     148,3
03_00 2000-01-01 145,9  147,4
03_00 2000-01-02 NA     147,4
03_00 2000-01-03 147,4  147,4

断面と時間 ID が同じ行に指定されている pdata.frame も作成しました。

row.names              x
01_00-2000-01-01    146.16  
01_00-2000-01-02    147,2   
01_00-2000-01-03    NA  

私はRが初めてなので、アドバイスをいただければ幸いです。

*テーブルの構造を編集:

Classes ‘data.table’ and 'data.frame':  7212530 obs. of  6 variables:
 $ var01 : Factor w/ 1018 levels "01_00","01_01",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ id01  : Factor w/ 7085 levels "1995-09-25","1995-09-26",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ spot  : num  146 146 145 146 147 ...
 $ weekly: num  NA NA NA NA NA NA NA NA NA NA ...
 $ NEW   : num  241 241 241 241 241 ...
 $ NEW3  : num  241 241 241 241 241 ...
 - attr(*, ".internal.selfref")=<externalptr> 
4

1 に答える 1

0

あなたは試すことができます

library(data.table)
setDT(df1)[order(t), NEW:=tail(x[!is.na(x)],1), xsection][]
#   xsection          t      x   NEW
#1:    01_00 2000-01-01 146,16 147,2
#2:    01_00 2000-01-02  147,2 147,2
#3:    01_00 2000-01-03     NA 147,2
#4:    02_00 2000-01-01     NA 148,3
#5:    02_00 2000-01-02  148,3 148,3
#6:    02_00 2000-01-03     NA 148,3
#7:    03_00 2000-01-01  145,9 147,4
#8:    03_00 2000-01-02     NA 147,4
#9:    03_00 2000-01-03  147,4 147,4

または

library(dplyr)
df1 %>%
   group_by(xsection) %>%
   arrange(t) %>%
   mutate(NEW= tail(x[!is.na(x)],1))

または

df1 %>%
    group_by(xsection) %>%
    mutate(NEW=  x[!is.na(x)][which.max(t[!is.na(x)])] )

アップデート

すべての 'x' 要素が 'xsection' グループの NA である場合、最初のソリューションを次のように変更できます。

 setDT(df1)[order(t), NEW:=if(all(is.na(x))) x[1L] 
                      else tail(x[!is.na(x)],1), xsection][]

データ

df1 <- structure(list(xsection = c("01_00", "01_00", "01_00", "02_00", 
"02_00", "02_00", "03_00", "03_00", "03_00"), t = structure(c(10957, 
10958, 10959, 10957, 10958, 10959, 10957, 10958, 10959), 
 class = "Date"), 
x = c("146,16", "147,2", NA, NA, "148,3", NA, "145,9", NA, 
"147,4")), .Names = c("xsection", "t", "x"), row.names = c(NA, 
-9L), class = "data.frame")
于 2015-04-08T12:18:05.487 に答える