A: ifelse() が日付を数値に変換しないようにします


基本 R のifelse()関数は、デフォルトで日付オブジェクトを数値オブジェクトに変換します。

これを防ぐには、代わりに次のいずれかの方法を使用できます。

方法 1: Base R で as.character() を使用する

 df$date <- as. Date (ifelse(df$date < ' 2022-01-20 ',
                   as. character (df$date+5),
                   as. character (df$date)))

方法 2: dplyr で if_else() を使用する

 df$date <- if_else(df$date < ' 2022-01-20 ', df$date+5, df$date)

方法 3: data.table で fifelse() を使用する

 df$date <- fifelse(df$date < ' 2022-01-20 ', df$date+5, df$date)

次の例は、R の次のデータ フレームで各メソッドを実際に使用する方法を示しています。

 #create data frame
df <- data. frame (date=as. Date (c('2022-01-05', '2022-01-17', '2022-01-22',
                        '2022-01-23', '2022-01-29', '2022-02-13')),
                 sales=c(22, 35, 24, 20, 16, 19))

#view data frame
df

        dirty date
1 2022-01-05 22
2 2022-01-17 35
3 2022-01-22 24
4 2022-01-23 20
5 2022-01-29 16
6 2022-02-13 19

例 1: Base R で as.character() を使用する

次のコードは、 as.character()関数を R 基本のifelse()関数とともに使用して、データ フレームの日付列に対して if else ステートメントを実行し、結果として日付を生成する方法を示しています。

 #if date is before 2022-01-20 then add 5 days
df$date <- as. Date (ifelse(df$date < ' 2022-01-20 ',
                   as. character (df$date+5),
                   as. character (df$date)))

#view updated data frame
df

        dirty dates
1 2022-01-10 22
2 2022-01-22 35
3 2022-01-22 24
4 2022-01-23 20
5 2022-01-29 16
6 2022-02-13 19

日付列の値が 01/20/2022 より前の場合、日付に 5 日が追加されました。

日付列は数値形式に変換されず、日付形式が保持されていることに注意してください。

例 2: dplyr で if_else() を使用する

次のコードは、dplyr のif_else()関数を使用して、データ フレームの日付列に対して if else ステートメントを実行し、結果として日付を生成する方法を示しています。

 library (dplyr)

#if date is before 2022-01-20 then add 5 days
df$date <- if_else(df$date < ' 2022-01-20 ', df$date+5, df$date)

#view updated data frame
df

        dirty date
1 2022-01-10 22
2 2022-01-22 35
3 2022-01-22 24
4 2022-01-23 20
5 2022-01-29 16
6 2022-02-13 19

日付列の値が 01/20/2022 より前の場合、日付に 5 日が追加されました。

日付列は数値形式に変換されず、日付形式が保持されていることに注意してください。

例 3: data.table で fifelse() を使用する

次のコードは、data.table のfifelse()関数を使用して、データ フレームの日付列に対して if else ステートメントを実行し、結果として日付を生成する方法を示しています。

 library (data.table)

#if date is before 2022-01-20 then add 5 days
df$date <- fifelse(df$date < ' 2022-01-20 ', df$date+5, df$date)

#view updated data frame
df

        dirty dates
1 2022-01-10 22
2 2022-01-22 35
3 2022-01-22 24
4 2022-01-23 20
5 2022-01-29 16
6 2022-02-13 19

日付列の値が 01/20/2022 より前の場合、日付に 5 日が追加されました。

ここでも、日付列は数値形式に変換されず、日付形式が保持されました。

: 非常に大きなデータ フレームの場合、dplyr メソッドと data.table メソッドは基本的な R メソッドよりも高速になります。

追加リソース

次のチュートリアルでは、R で他の一般的なタスクを実行する方法について説明します。

R でネストされた If Else ステートメントを記述する方法
R で case ステートメントを記述する方法
Rでデータフレームに複数の列を追加する方法

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です