【问题标题】:Scatter plot with variables that have multiple different years具有多个不同年份的变量的散点图
【发布时间】:2021-08-24 00:53:02
【问题描述】:

我目前正在尝试绘制儿童死亡率和童工的散点图。我的问题是,我实际上并没有很多数据,有些国家可能只有某些年份的值,而其他一些国家可能只有其他年份的数据,所以我无法将所有数据绘制在一起,任何一年的数据也不足以限制到那一年。我想知道是否有一个函数可以为任何给定的指定变量获取数据集中可用的 last 值。因此,例如,如果我最近一次来自德国的童工数据来自 2015 年,而我来自意大利的最后一次数据来自 2014 年,以此类推其他国家/地区,有没有办法可以绘制最后的值每个国家

代码如下:

head(data2)
# A tibble: 6 x 5
  Entity      Code   Year mortality labor
  <chr>       <chr> <dbl>     <dbl> <dbl>
1 Afghanistan AFG    1962      34.5    NA
2 Afghanistan AFG    1963      33.9    NA
3 Afghanistan AFG    1964      33.3    NA
4 Afghanistan AFG    1965      32.8    NA
5 Afghanistan AFG    1966      32.2    NA
6 Afghanistan AFG    1967      31.7    NA

别管那些 NA。劳动力数据只是没有回到那里。但最近几年,我确实在数据集中有它。另一方面,儿童死亡率数据实际上相当完整。

谢谢。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    我找不到要绘制的变量,但以下代码只能选择每个国家/地区的最后一个。

        data2 %>%
          group_by(Entity) %>%
          filter(Year == max(Year)) %>% 
          ungroup
    

    结果是这样的

          Entity      Code   Year mortality labor
          <chr>       <chr> <dbl>     <dbl> <lgl>
        1 Afghanistan AFG    1967      31.7 NA  
    

    不,你可以绘制一些变量。

    【讨论】:

    • 很抱歉没有给出变量名。您提出的问题是其中一个变量比另一个变量延伸得更远,因此按最大年份过滤只会将 every 变量过滤到那一年,而且,正如我所说,我没有有那个数据。我正在寻找灵活的东西(如果有的话)。我需要每个变量来适应去年,而不仅仅是一个将军。但是非常感谢您的回复。欣赏它。
    • @Gaspar 您是否需要一次获取去年的每个变量?或者每个变量都选择最后一个变量是可以接受的?
    • 通过使用group_by(Entity),它将只保留年份的最大值,每个实体(国家),因此它应该可以按您的意愿工作。
    【解决方案2】:

    您可能想要定义每组的“最后一个”值是什么意思 - 就像数据中最近的、最后一次出现的值或其他内容一样?

    dplyr::last 挑选出数据中最后出现的位置,因此您可以将它与arrange 一起使用来对数据进行排序。在这个例子中,我们按Year(默认升序)对数据进行排序,所以最后的观察将是最近的。假设您不想包含 NA 值,我们还使用 filter 将它们从数据中删除。

    data2 %>%
    
       # first remove NAs from the data
       filter(
          !is.na(labor)
       ) %>%
    
       # then sort the data by Year
       arrange(Year) %>%
    
       # then extract the last observation per country
       group_by(Entity) %>%
       summarise(
          last_record = last(labor)
       )
    

    【讨论】:

    • 是的,我希望数据尽可能最新。正如我所说,如果我有德国 2014 年和意大利 2015 年的儿童数据(数据集当然也有旧数据,但可能忘记提及那部分),这些就是我想要绘制的值。再一次,您的解决方案奏效了。 非常感谢
    • 让我补充一下:现在我试图在geom_smooth(formula = y ~ x, method = "lm", col = "black", alpha = 0, linetype = "dashed") 中包含一条线性回归线,但什么都不会出现。知道为什么吗?
    • 我不能说没有看到你的代码中还有什么。我建议查看“R for Data Science”r4ds.had.co.nz/index.html。特别是在这种情况下第 3 章数据可视化和第 5 章数据转换。
    • 我可以让你看看。 str(data2) spec_tbl_df[,5] [11,945 × 5] (S3: spec_tbl_df/tbl_df/tbl/data.frame) $ Entity : chr [1:11945] "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ... $ Code : chr [1:11945] "AFG" "AFG" "AFG" "AFG" ... $ Year : num [1:11945] 1962 1963 1964 1965 1966 ... $ mortality: num [1:11945] 34.5 33.9 33.3 32.8 32.2 ... $ labor : num [1:11945] NA NA NA NA NA NA NA NA NA NA ... 会读那本书!只是等着看我是否也能得到它的物理版本。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    • 2020-02-15
    • 2020-03-30
    相关资源
    最近更新 更多