使用dplyr::rowwise与min时输出单行值而非逐行值的异常问题
解决rowwise()+min()计算逐行日期最小值异常的问题
问题根源
你当前代码中,min(as.Date(date1), as.Date(date2), na.rm = T) 实际是计算**date1和date2两列的全局最小值**,而非逐行取对应位置的两个日期的最小值。即便添加了rowwise(),直接传入列向量给min()不会触发逐行计算逻辑。另外你的date1、date2已是Date类型,无需重复转换。
修复方法
方法1:用pmin()(无需rowwise(),更高效)
pmin()是向量化的逐行最小值函数,专门处理按元素对取最小的场景:
df <- indf %>% mutate(test = pmin(date1, date2, na.rm = TRUE))
方法2:结合rowwise()与c()(显式构造行内向量)
若坚持用rowwise(),需将每行的两个日期打包成向量再取最小值,且用完后建议取消分组避免后续操作异常:
df <- indf %>% rowwise() %>% mutate(test = min(c(date1, date2), na.rm = TRUE)) %>% ungroup()
验证结果
用你提供的数据测试,两种方法均会生成正确的逐行最小值:
| id | date1 | date2 | test |
|---|---|---|---|
| 5001 | NA | 2020-08-01 | 2020-08-01 |
| 3002 | 2020-12-19 | 2020-12-17 | 2020-12-17 |
| 2001 | NA | 2021-01-27 | 2021-01-27 |
| 1001 | NA | 2021-03-04 | 2021-03-04 |
| 6001 | NA | 2021-03-07 | 2021-03-07 |
| 9001 | NA | 2021-03-25 | 2021-03-25 |
注:你的原始代码末尾缺失一个闭合括号,修复后的代码已补全语法。
内容的提问来源于stack exchange,提问作者user2272972
相关产品推荐
相关产品推荐

