R运行cbind计算PV时报Error in FUN(left, right)错误如何解决
R代码cbind操作报错排查
报错原因
你执行df1$DR1 - x减法运算时,x中包含字符类型列:
你定义的df1里DR012、DR013、DR014三列存在空字符串"",R读取这类混合了字符和数值的列时会统一转为字符型,数值和字符无法直接做算术运算,因此触发non-numeric argument to binary operator报错。
修复方法
先将所有DR0开头的列转为数值型,空字符串会自动转为NA,也可以根据需求替换为0,再执行后续计算即可。
可运行的修复后代码
library(dplyr) library(tidyverse) library(lubridate) df1 <- structure( list(date1= c("2021-06-28","2021-06-28","2021-06-28","2021-06-28"), date2 = c("2021-06-30","2021-07-01","2021-07-02","2021-07-02"), Code = c("FDE","ABC","ABC","FDE"), Week= c("Wednesday","Wednesday","Friday","Friday"), DR1 = c(4,1,4,1), DR01 = c(4,1,4,2), DR02= c(4,2,6,2),DR03= c(9,5,4,2), DR04 = c(5,4,3,3),DR05 = c(5,4,5,2), DR06 = c(2,4,3,3),DR07 = c(2,5,4,2), DR08 = c(0,0,0,4),DR09 = c(0,0,0,2),DR010 = c(0,0,0,2),DR011 = c(4,0,0,2), DR012 = c(0,0,0,""), DR013 = c(0,0,1,""), DR014 = c(0,0,0,"")), class = "data.frame", row.names = c(NA, -4L)) # 新增步骤:将所有DR0开头的列转为数值型,空字符串自动转为NA x<-df1 %>% select(starts_with("DR0")) %>% mutate(across(everything(), as.numeric)) # 如果需要把空值替换为0,用这行替换上一行: # x<-df1 %>% select(starts_with("DR0")) %>% mutate(across(everything(), ~as.numeric(replace(.x, .x=="", 0)))) x<-cbind(df1, setNames(df1$DR1 - x, paste0(names(x), "_PV"))) PV<-select(x, date2,Week, Code, DR1, ends_with("PV"))
内容的提问来源于stack exchange,提问作者user17163779
相关产品推荐
相关产品推荐

