在R语言中移除xts/zoo类型数据中的NA值问题求助
问题:移除xts/zoo对象中含NA的行
背景代码
library(quantmod) library(tidyr) start="2022-01-01" end="2022-11-01" getSymbols("0386.HK",from=start, to=end) getSymbols("600028.SS",from=start,to=end) CPC_H<-`0386.HK`[,6] CPC_A<-`600028.SS`[,6] df<-cbind(CPC_A,CPC_H)
合并后的df为xts/zoo类对象,前几行数据如下:
> head(df) X600028.SS.Adjusted X0386.HK.Adjusted 2022-01-03 NA 3.197658 2022-01-04 3.555848 3.223655 2022-01-05 3.572542 3.327643 2022-01-06 3.564195 3.318978 2022-01-07 3.630971 3.388304 2022-01-10 3.622625 3.344975
尝试用tidyr::drop_na()处理时触发报错:
df%>% drop_na(CPC_H) Error in UseMethod("drop_na") : no applicable method for 'drop_na' applied to an object of class "c('xts', 'zoo')"
解决方案
方法1:使用xts/zoo原生函数na.omit()
这是处理xts/zoo对象缺失值的最直接方式,会自动移除任意列包含NA的整行:
df_clean <- na.omit(df)
方法2:转换为data.frame后用tidyr处理
如果习惯tidyverse语法,可以先将xts对象转为data.frame,再用drop_na()处理:
library(dplyr) # 保留日期列的转换方式 df_clean <- df %>% as.data.frame() %>% mutate(date = index(df)) %>% relocate(date) %>% drop_na() # 若不需要单独日期列,可简化 df_clean <- df %>% as.data.frame() %>% drop_na() # 如需转回xts对象 df_clean_xts <- xts(df_clean[, -1], order.by = df_clean$date)
内容的提问来源于stack exchange,提问作者Bubbles
相关产品推荐
相关产品推荐

