R语言分组聚合数据框为列表时日期格式异常问题求助
问题原因
R中Date类型底层以整数存储,数值代表距离1970-01-01的天数,直接调用list做聚合时不会自动保留Date类属性,会直接输出底层整数值,就会出现类似18788的异常结果。
修复方案
聚合前先将Date列转为目标格式的字符串,即可避免格式丢失。如果需要直接输出示例中逗号分隔的文本(而非列表对象),可以直接在聚合时做字符串拼接,代码如下:
library(dplyr) g1 <- df1 %>% # 按实际原始日期格式调整解析参数,format函数输出统一为yyyy-mm-dd格式字符串 mutate(Date = format(as.Date(Date, format = '%Y%m%d'), '%Y-%m-%d')) %>% # 注意列名大小写匹配,原数据列名为首字母大写的Status group_by(Status) %>% summarise( ID = paste(ID, collapse = ","), Date = paste(Date, collapse = ", ") ) %>% # 按要求调整列顺序为Status、ID、Date select(Status, ID, Date)
如果需要保留列表结构而非拼接后的字符串,只需要在转为字符串后再执行list聚合即可,不会再出现数值异常:
g1 <- df1 %>% mutate(Date = format(as.Date(Date, format = '%Y%m%d'), '%Y-%m-%d')) %>% group_by(Status) %>% summarise(across(c(ID, Date), list))
内容的提问来源于stack exchange,提问作者user17582908
相关产品推荐
相关产品推荐

