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中使用fielse()

 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,我们会在该日期后添加五天。

请注意,日期列保留了其日期格式,而不是转换为数字格式。

示例 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,我们会在该日期后添加五天。

请注意,日期列保留了其日期格式,而不是转换为数字格式。

示例 3:在 data.table 中使用 fielse()

以下代码显示如何使用 data.table 的fielse()函数对数据框中的日期列执行 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,我们会在该日期后添加五天。

同样,日期列保留其日期格式,而不是转换为数字格式。

注意:对于非常大的数据帧,dplyr 和 data.table 方法将比基本 R 方法更快。

其他资源

以下教程解释了如何在 R 中执行其他常见任务:

如何在 R 中编写嵌套的 If Else 语句
如何在 R 中编写 case 语句
如何在R中向数据框添加多列

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注