R中排序data frame时行数减少问题求助
解决tibble排序后行数莫名减少的问题
嘿,这个问题我碰到过!咱们一步步来排查和解决:
最可能的根源:Date列存在缺失值(NA)
你用基础R的order()函数排序时,如果Date列里有NA,order(Date)会给这些NA行返回NA类型的索引。而你用的tibble(也就是tbl_df)在遇到NA索引时,会直接丢弃对应的行——这就是为啥行数从81掉到55(算一下:81-55=26,说明你刚好有26个缺失的Date值)。
先验证这个猜想:跑下面的代码看看Date列的缺失数:
sum(is.na(y_data$Date))
如果结果是26,那咱们就找对问题啦!
两种解决办法
办法1:用dplyr::arrange()(推荐,适配tibble的最佳姿势)
tibble属于tidyverse家族,用arrange()排序会自动保留所有行,还会把NA老老实实放到最后:
library(dplyr) y_data <- y_data %>% arrange(Date) # 再查行数 dim(y_data) # 肯定回到81行啦
办法2:给order()加个参数
要是不想用dplyr,也可以手动让order()把NA行安排到最后,生成有效的索引:
y_data <- y_data[order(y_data$Date, na.last = TRUE),] dim(y_data) # 同样能保住所有81行
小提示
以后处理tibble的时候,尽量用tidyverse系列的函数(比如arrange()、filter()),它们和tibble的兼容性更好,不会出现这种基础R函数带来的“小意外”。
内容的提问来源于stack exchange,提问作者itthrill
相关产品推荐
相关产品推荐

