2017-02-23 17 views
1

特定の日付より前に発生するデータフレーム内の特定の行/列に値NAを設定します。しかし、各列には異なる日付/基準があります。それではどうしたの?特定の値を日付に基づくデータフレームに設定する条件

サンプルDATAFRAME:

dates <- c("01/01/2015", "06/15/2015", "11/30/2015") 
a <- c(1, 2, 3) 
b <- c(2, 4, 6) 
c <- c(3, 5, 9) 
df <- data.frame(Date = dates, A = a, B = b, C = c) 

startDate <- c("02/20/2015", "07/28/2015", "12/01/2015") 

だから私のdata.frameは次のようになります。

Date  A  B  C 
    01/01/2015 1  2  3 
    06/15/2015 2  4  5 
    11/30/2015 3  6  9 

startDateを使用して、私の基準は、私は相対的にその日付の前に任意の値を設定したいと列をNAとすると、最終結果は次のようになります。

Date  A  B  C 
    01/01/2015 NA  NA NA 
    06/15/2015 2  NA NA 
    11/30/2015 3  6  NA 

誰か助けてくれますか? Btw、私の実際のdata.frameには約20以上の列があります。上記は実際の問題のほんの一例です。

ありがとうございます!

答えて

0

テストこの:このため

#Do a pairwise comparison of dates using outer 
m = matrix(
    as.numeric(
     outer(as.Date(as.character(df[,1]), format = "%m/%d/%Y"), 
       as.Date(as.character(startDate), format = "%m/%d/%Y"), ">") 
    ), 
    nrow = nrow(df)) 

m[m == 0] = NA #Set zeroes in m to NA 
df[,2:ncol(df)] = df[,2:ncol(df)] * m #Multiply the columns of df (except 1st) with m 
df 
#  Date A B C 
#1 01/01/2015 NA NA NA 
#2 06/15/2015 2 NA NA 
#3 11/30/2015 3 6 NA 
+0

おかげで - しかし、それは必ずしもゼロであるたstartDate後の値がある場合は、右、次のステップでNAとゼロを置き換えるために動作しないのでしょうか? – RiddleMeThis

+0

@RiddleMeThis、出力は今あなたが望むものでなければなりません。次のステップで「NA」に変換する必要はありません。 –

+1

私は実際にはmで乗算するのではなく、mで除算するのが最善だと思います。それはNaNとInf値を与え、do.call(df、lapply(df、function(x)replace(x、is.infinite(x)、NA)))などの値を使って、値をNAに変換することができます。どうもありがとう!これは本当に私を助けます。 – RiddleMeThis

関連する問題