【问题标题】:Loop of missing data by year按年份循环缺失数据
【发布时间】:2020-12-19 03:57:18
【问题描述】:

我需要为我的数据集 ds 运行一个循环。 ds的亮度是4000,11。代表世界的每个国家。每个国家都有 1970 年到 1999 年的数据。

数据集的 8 行中有缺失数据。我需要运行一个循环来计算每年有多少丢失的数据。年份以 df$year 为单位。

我很确定年份(1970、1971、1972...)是数值。

这是我当前的代码

missingds<-c()
for (i in 1:length(ds)){
    missingds[names(ds)[i]]<-sum(is.na(ds[i]))/4000
}

这给了我每个 ds 变量的缺失数据比例。我只是不知道如何让它报告每年所有变量的比例。

我确实有一个指示变量 ds$missing,如果该行的任何列中存在 NA,则报告 1,否则报告 0。

A picture of ds

【问题讨论】:

    标签: r loops


    【解决方案1】:

    要使用 dplyr 计算每列中 NA 值的数量,您可以这样做:

    library(dplyr)
    
    result <- data %>%
                group_by(Year) %>%
                summarise(across(gdp_growth:polity, ~sum(is.na(.))))
    

    在基础 R 中,您可以使用 aggregate

    aggregate(cbind(gdp_growth, gdp_per_capita, inf_mort, pop_density, polity)~year, 
              data, function(x) sum(is.na(x)))
    

    如果要计算每个yearNA 值的比例,请将sum 替换为mean

    【讨论】:

    • 不使用dplyr怎么样?
    • @869picardy 使用基本 R 选项更新了答案。顺便说一句,如果您以可重现的格式而不是屏幕截图发布数据,这将很有帮助。我们无法从屏幕截图中复制数据。
    【解决方案2】:

    使用data.table

    library(data.table)
    setDT(data)[, lapply(.SD, function(x) sum(is.na(x))),
        by = Year, .SDcols = gdp_growth:polity]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 2017-10-04
      • 1970-01-01
      • 2020-12-06
      • 2016-10-30
      • 2011-12-13
      相关资源
      最近更新 更多