R语言如何删除datas变量中Numbers等于NA的对应行
删除datas中Numbers列值为NA的行的实现方法
要实现该需求,有两种常用的实现方案:
- 适配你已使用的dplyr语法,写法更统一:
datas <- datas %>% filter(!is.na(Numbers))
- 基础R语法,无需依赖额外包:
datas <- datas[!is.na(datas$Numbers), ]
完整可运行代码
你可以直接在原有代码末尾添加上述任意一行代码即可,完整示例如下:
library(dplyr) library(tidyverse) library(lubridate) library(data.table) df1 <- structure( list(date= c("2021-06-28","2021-06-28","2021-06-28","2021-06-28","2021-06-28", "2021-06-28","2021-06-28","2021-06-28"), date2 = c("2021-06-30","2021-06-30","2021-06-30","2021-07-01","2021-07-01","2021-07-01","2021-07-01","2021-07-01"), Code = c("ABC","CDE","FGH","ABC","CDE","FGH","ABC","CDE"), DR01 = c(4,1,4,3,3,4,3,6), DR02= c(4,2,6,7,3,2,7,4),DR03= c(9,5,4,3,3,2,1,5), DR04 = c(5,4,3,3,6,2,1,9),DR05 = c(5,4,5,3,6,2,1,9), DR06 = c(2,4,3,3,5,6,7,8),DR07 = c(2,5,4,4,9,4,7,8), DR08 = c(0,0,0,1,2,0,0,0),DR09 = c(0,0,0,0,0,0,0,0),DR010 = c(0,0,0,0,0,0,0,0),DR011 = c(4,0,0,0,0,0,0,0), DR012 = c(0,0,0,3,0,0,0,5),DR013 = c(0,0,1,0,0,0,2,0),DR014 = c(0,0,0,1,0,2,0,0)), class = "data.frame", row.names = c(NA, -8L)) df1<-df1 %>% mutate(index=row_number()) %>% pivot_longer(starts_with('DR')) %>% mutate(rleid=rleid(value==0)) %>% group_by(index) %>% mutate(value=replace(value, value==0 & rleid==last(rleid), NA)) %>% select(-index, -rleid) %>% pivot_wider(names_from = name, values_from = value) dmda<-"2021-07-01" datas <- df1%>% filter(date2 == ymd(dmda)) %>% group_by(Code) %>% summarize(across(starts_with("DR0"), sum)) %>% pivot_longer(cols = -Code, names_pattern = "DR0(.+)", values_to = "val") %>% mutate(name = readr::parse_number(name)) colnames(datas)[-1] <-c("Days","Numbers") # 新增此行删除Numbers为NA的行 datas <- datas %>% filter(!is.na(Numbers))
内容的提问来源于stack exchange,提问作者user16774617
相关产品推荐
相关产品推荐

