[英]Non-numeric Argument to Binary Operator Error R Studio
當我嘗試在 R 中將一個數字除以另一個數字時,我在 R 中得到一個二進制運算符錯誤的非數字參數。 代碼如下。 當我運行sapply
(類和模式)時,dataframe 中的兩列都是數字整數。 任何建議都會非常受歡迎。
##Get the Data for Businesses
Busi_URL <- GET("https://www.nomisweb.co.uk/api/v01/dataset/NM_142_1.data.json?geography=1820327937&industry=37748736&employment_sizeband=0&legal_status=0&measures=20100")
##Convert the Data
Busi_Text <- content(Busi_URL, "text")
Busi_JSN <- fromJSON(Busi_Text, flatten = TRUE)
Busi_df <- as.data.frame(Busi_JSN)
##Get the Population Data
BusiPop_Url <-GET("https://www.nomisweb.co.uk/api/v01/dataset/NM_31_1.data.json?geography=1811939329&date=latestMINUS9-latest&sex=7&age=0&measures=20100")
BusiPop_Text <- content(BusiPop_Url, "text")
BusiPop_JSN <- fromJSON(BusiPop_Text, flatten = TRUE)
BusiPop_df <- as.data.frame(BusiPop_JSN)
##Join the tables together
FinalBusi_df <-full_join(x=Busi_df,
y=BusiPop_df,
by=c("obs.geography.geogcode","obs.time.value"))
##Ensure all are numeric
FinalBusi_df$obs.obs_value.value.x<-lapply(FinalBusi_df$obs.obs_value.value.x, as.numeric)
FinalBusi_df$obs.obs_value.value.y<-lapply(FinalBusi_df$obs.obs_value.value.y, as.numeric)
##Test
sapply(FinalBusi_df$obs.obs_value.value.x, class)
sapply(FinalBusi_df$obs.obs_value.value.y, class)
sapply(FinalBusi_df$obs.obs_value.value.x, mode)
sapply(FinalBusi_df$obs.obs_value.value.y, mode)
## Try the maths
FinalBusi_df %>%
select(obs.obs_value.value.x, obs.obs_value.value.y, obs.time.value, obs.geography.description.x)%>%
summarise(obs.obs_value.value.x/obs.obs_value.value.y)
抱歉,如果我在這里遺漏或做一些完全明顯的事情,我只學習 R 大約一個月左右,所以我可能犯了一個非常菜鳥的錯誤!
您的問題在這一行:
##Ensure all are numeric
FinalBusi_df$obs.obs_value.value.x<-lapply(FinalBusi_df$obs.obs_value.value.x, as.numeric)
FinalBusi_df$obs.obs_value.value.y<-lapply(FinalBusi_df$obs.obs_value.value.y, as.numeric)
as.numeric
是矢量化的,因此您不需要lapply
將它們轉換為數字。 此外,當您使用lapply
時,返回的 output 是一個列表,因此您會收到錯誤Non-numeric Argument to Binary Operator
。 將上面的行更改為:
FinalBusi_df$obs.obs_value.value.x <- as.numeric(FinalBusi_df$obs.obs_value.value.x)
FinalBusi_df$obs.obs_value.value.y <- as.numeric(FinalBusi_df$obs.obs_value.value.y)
然后運行您的代碼,它按預期工作。
library(dplyr)
FinalBusi_df %>% summarise(result = obs.obs_value.value.x/obs.obs_value.value.y)
# result
#1 NA
#2 0.02395833
#3 0.02488152
#4 0.02492904
#5 0.02535411
#6 0.02849057
#7 0.02916275
#8 0.03024459
#9 0.02969043
#10 0.03300562
只看數據。 BusiPop 表的第一行中缺少數字。
BusiPop_df %>% select(obs.obs_value.value, obs.obs_status.description)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.