簡體   English   中英

參數不是數字

[英]Argument is not numeric

我想可視化感染 COVID-19 的人數,但我無法獲得死亡率,因為在獲得每個縣的每 100,000 人口的死亡率時,死亡人數是由 int 得出的。

我想要達到的目標

我想通過將“covid19j_20200613$deaths”的數據類型設置為num來找到“covid19j_20200613$POP2019 * 100”的解決方案。

錯誤信息。

 Error in covid19j_20200613$deaths/covid19j_20200613$POP2019: 
   Argument of binary operator is not numeric 

有問題的源代碼。

library(spdep)
library(sf)
library(spatstat)
library(tidyverse)
library(ggplot2)

needs::prioritize(magrittr)

covid19j <- read.csv("https://raw.githubusercontent.com/kaz-ogiwara/covid19/master/data/prefectures.csv",
                     header=TRUE)

# Below is an example for May 20, 2020.
# Month and date may be changed

covid19j_20200613 <- dplyr::filter(covid19j,
                                   year==2020,
                                   month==6,
                                   date==13)
covid19j_20200613$CODE <- 1:47

covid19j_20200613[is.na(covid19j_20200613)] <- 0

pop19 <- read.csv("/Users/carlobroschi_imac/Documents/lectures/EGDS/07/covid19_data/covid19_data/pop2019.csv", header=TRUE)

covid19j_20200613 <- dplyr::inner_join(covid19j_20200613, pop19, 
                                       by = c("CODE" = "CODE"))

# Load Japan prefecture administrative boundary data
jpn_pref <- sf::st_read("/Users/carlobroschi_imac/Documents/lectures/EGDS/07/covid19_data/covid19_data/jpn_pref.shp")
# Data and concatenation
jpn_pref_cov19 <- dplyr::inner_join(jpn_pref, covid19j_20200613, by=c("PREF_CODE"="CODE"))

ggplot2::ggplot(data = jpn_pref_cov19) + 
  geom_sf(aes(fill=testedPositive)) + 
  scale_fill_distiller(palette="RdYlGn") + 
  theme_bw() +
  labs(title = "Tested Positiv of Covid19 (2020/06/13)")


# Mortality rate per 100,000 population
# Population number in units of 1000
as.numeric(covid19j_20200613$deaths)
covid19j_20200613$deaths_rate <- covid19j_20200613$deaths / covid19j_20200613$POP2019 * 100

有問題的源代碼。

prefectures.csv
https://docs.google.com/spreadsheets/d/11C2vVo-jdRJoFEP4vAGxgy_AEq7pUrlre-i-zQVYDd4/edit?usp=sharing
pop2019.csv
https://docs.google.com/spreadsheets/d/1CbEX7BADutUPUQijM0wuKUZFq2UUt-jlWVQ1ipzs348/edit?usp=sharing

我們嘗試了什么

我嘗試在計算之前輸入“as.numeric(covid19j_20200613$deaths)”並將死亡人數設置為 num,但在計算過程中我收到了相同的錯誤消息。

附加信息(固件/工具版本等)

iMac M1 2021,R 4.2.0

使用www.DeepL.com/Translator翻譯(免費版)

as.numeric()不會永久更改數據類型 - 它只是臨時更改。

因此,當您運行as.numeric(covid19j_20200613$deaths)時,這會將deaths列顯示為數字,但該列將保留一個字符。

所以如果你想強制數據類型,你還需要重新分配:

covid19j_20200613$deaths <- as.numeric(covid19j_20200613$deaths)
covid19j_20200613$POP2019 <- as.numeric(covid19j_20200613$POP2019)

# Now you can do calculations
covid19j_20200613$deaths_rate <- covid19j_20200613$deaths / covid19j_20200613$POP2019 * 100

如果您使用dplyrmutate ,則更容易閱讀:

covid19j_20200613 <- covid19j_20200613 |>
  mutate(
    deaths = as.numeric(deaths),
    POP2019 = as.numeric(POP2019),
    death_rate = deaths / POP2019 * 100
  )

結果

  deaths POP2019 deaths_rate
1     91    5250  1.73333333
2      1    1246  0.08025682
3      0    1227  0.00000000
4      1    2306  0.04336513
5      0     966  0.00000000

PS:你的問題真的很難理解! 有很多東西我們實際上不需要回答,所以這讓我們更難確定問題出在哪里。 例如,所有的數據導入、連接、ggplot...

寫問題時,請僅包含導致問題的最小元素。 在您的情況下,我們只需要一個包含deathsPOP2019列的示例數據集,以及您最后嘗試修復的兩行代碼。

如果您查看str(covid19j) ,您會看到deaths列是一個包含大量空格的字符列。 您需要弄清楚該列的結構才能正確閱讀它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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