R语言按条件复制日期列到新列时被强制转为整数问题求解
问题原因
- R的
Date类型本质是存储为自1970-01-01起的天数整数,你现有代码的赋值逻辑是先对df$New_Date的部分位置赋值,R会默认将未初始化的New_Date列先创建为整数型向量,后续赋值仅填充数值,不会自动追加Date类属性,因此最终只显示底层存储的整数天数。
解决方法
方法1:先初始化Date类型列再赋值
先提前创建好Date类型的空新列,再按原有逻辑赋值即可保留格式:
# 先初始化空Date列 df$New_Date <- as.Date(NA) # 原有赋值逻辑 df$New_Date[df$criteria <= 0] <- df$old_Date1[df$criteria <= 0] df$New_Date[df$criteria > 0] <- df$old_Date2[df$criteria > 0]
方法2:用ifelse一次性生成后补回日期属性
更简洁的单语句写法,手动给生成的列追加Date类属性:
df$New_Date <- ifelse(df$criteria <= 0, df$old_Date1, df$old_Date2) # 补回Date类型属性 class(df$New_Date) <- "Date"
方法3:dplyr包case_when实现
如果使用tidyverse生态,case_when会自动匹配同类型输入的输出格式,无需额外处理类型:
library(dplyr) df <- df %>% mutate(New_Date = case_when( criteria <= 0 ~ old_Date1, TRUE ~ old_Date2 ))
内容的提问来源于stack exchange,提问作者Coon
相关产品推荐
相关产品推荐

