R软件绘图报错调整:df2数据集无法生成图形问题如何解决
问题原因
df2的数值列命名格式与df1不同:
- df1的数值列格式为
DRxx(xx为数字,如DR01) - df2的数值列格式为
DRxx_DRxx_PV(如DR01_DR01_PV)
你原代码中pivot_longer的正则DR(.+)会抓取DR后的所有内容,得到01_DR01_PV这类无法转换为数字的字符串,执行as.numeric(name)时就会生成NA,导致后续绘图失败。
解决方法
仅需修改pivot_longer的names_pattern参数,仅匹配DR后紧跟的数字即可:
library(dplyr) library(lubridate) library(tidyverse) df2 <- structure( list(date1 = 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-04-02","2021-04-03","2021-04-08","2021-04-09","2021-04-10","2021-07-01","2021-07-02","2021-07-03"), Week= c("Friday","Saturday","Thursday","Friday","Saturday","Thursday","Friday","Monday"), DR01_DR01_PV = c(4,1,4,3,3,4,3,6), DR02_DR02_PV= c(4,2,6,7,3,2,7,4),DR03_DR03_PV= c(9,5,4,3,3,2,1,5), DR04_DR04_PV = c(5,4,3,3,6,2,1,9),DR05_DR05_PV = c(5,4,5,3,6,2,1,9), DR06_DR06_PV = c(2,4,3,3,5,6,7,8),DR07_DR07_PV = c(2,5,4,4,9,4,7,8)), class = "data.frame", row.names = c(NA, -8L)) # 修正后的绘图代码 dmda<-"2021-07-01" datas<-df2 %>% filter(date2 == ymd(dmda)) %>% summarize(across(starts_with("DR"), sum)) %>% # 仅提取DR后的数字部分 pivot_longer(everything(), names_pattern = "DR(\\d+).+", values_to = "val") %>% mutate(name = as.numeric(name)) colnames(datas)<-c("Days","Numbers") attach(datas) plot(Numbers ~ Days, ylim=c(0,20)) model <- nls(Numbers ~ b1*Days^2+b2,start = list(b1 = 47,b2 = 0)) new.data <- data.frame(Days = seq(min(Days),max(Days),len = 45)) lines(new.data$Days,predict(model,newdata = new.data))
修改后即可正常生成和df1效果一致的图形。
内容的提问来源于stack exchange,提问作者user16774617
相关产品推荐
相关产品推荐

