簡體   English   中英

二進制運算符錯誤 R Studio 的非數字參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM