如何用dplyr按分组将双变量NA值排在数据行首位?
问题解决方法
你的核心问题是原代码同时按AESOC和AEPT分组,导致AEPT为NA的行被单独拆分到子分组里,无法在对应AESOC分组的最前列统一排序。调整分组和排序逻辑即可实现需求:
调整后的代码
df <- df |> group_by(AESOC) |> # 仅保留AESOC作为分组依据,确保同AESOC的所有行在同一组内排序 arrange(is.na(AEPT), AEPT, !is.na(Severity), .by_group = TRUE)
逻辑说明
group_by(AESOC):取消对AEPT的分组,让同一AESOC下的所有行(包括AEPT为NA的)进入同一个排序组。is.na(AEPT):布尔值排序中TRUE(即AEPT为NA的行)会默认排在FALSE前面,直接实现NA行前置的需求。- 后续的
AEPT用于对非NA的AEPT行按自身值排序(可根据实际需求移除或调整),!is.na(Severity)保留你原本对Severity的排序逻辑。
如果需要对Severity非NA的行进一步按值排序,可修改为:
df <- df |> group_by(AESOC) |> arrange(is.na(AEPT), AEPT, is.na(Severity), Severity, .by_group = TRUE)
内容的提问来源于stack exchange,提问作者LucaS
相关产品推荐
相关产品推荐

