【问题标题】:Tidying Time Intervals for Plotting Histogram in R在 R 中绘制直方图的整理时间间隔
【发布时间】:2015-04-25 19:15:25
【问题描述】:

我正在对 LifeTables 包中的 MLTobs 进行一些聚类分析,并且遇到了 mlt.mx.info 数据框中的 Year 变量的棘手问题。 Year 包含使用生命表的时间段,以间隔为单位。这是数据表:

    1751-1754 1755-1759 1760-1764 1765-1769 1770-1774 1775-1779 1780-1784 1785-1789 1790-1794 
        1         1         1         1         1         1         1         1         1 
1795-1799 1800-1804 1805-1809 1810-1814 1815-1819 1816-1819 1820-1824 1825-1829 1830-1834 
        1         1         1         1         1         2         3         3         3 
1835-1839 1838-1839 1840-1844 1841-1844 1845-1849 1846-1849 1850-1854 1855-1859 1860-1864 
        4         1         5         3         8         1        10        11        11 
1865-1869 1870-1874 1872-1874 1875-1879 1876-1879 1878-1879 1880-1884 1885-1889 1890-1894 
       11        11         1        12         2         1        15        15        15 
1895-1899 1900-1904 1905-1909 1908-1909 1910-1914 1915-1919 1920-1924 1921-1924 1922-1924 
       15        15        15         1        16        16        16         2         1 
1925-1929 1930-1934 1933-1934 1935-1939 1937-1939 1940-1944 1945-1949 1947-1949 1948-1949 
       19        19         1        20         1        22        22         3         1 
1950-1954 1955-1959 1956-1959 1958-1959 1960-1964 1965-1969 1970-1974 1975-1979 1980-1984 
       30        30         2         1        40        40        41        41        41 
1983-1984 1985-1989 1990-1994 1991-1994 1992-1994 1995-1999 2000-2003 2000-2004 2005-2006 
        1        42        42         1         1        44         3        41        22 
2005-2007 
       14 

如您所见,一些区间位于其他区间内。值得庆幸的是,它们都没有重叠。我想简化间隔,以便1992-19941991-1994 等间隔都进入1990-1994

一个想法可能是获取每个区间的模数并以这种方式将它们排序为新的区间,但我不确定如何使用区间数据类型执行此操作。如果有人有任何想法,我将非常感谢您的帮助。最终我想创建一个直方图或条形图来很好地说明。

【问题讨论】:

    标签: r data-mining data-visualization data-cleaning


    【解决方案1】:

    如果我理解你的问题,你会想要这样的:

    bottom <- seq(1750, 2010, 5)
    library(dplyr)
    new_df <- mlt.mx.info %>%
      arrange(Year) %>%
      mutate(year2 = as.numeric(substr(Year, 6, 9))) %>%
      mutate(new_year = paste0(bottom[findInterval(year2, bottom)], "-",(bottom[findInterval(year2, bottom) + 1] - 1)))
    View(new_df)
    

    所以它的作用是创建 bin,并输出一个新列 (new_year),它是 bin 的底部。因此,从 1750-1754 的所有内容都将对应于 1750-1754 的新值(以字符串形式;原来是整数类型,不知道如何解决)。这是做你想做的吗?仔细检查结果,但它看起来对我来说是正确的。

    【讨论】:

    • 你是男人或女人)!非常感谢。我以前从未见过 findInterval 函数。发挥了魅力。我想我只是想让它们成为有序因子并使用 barplot。我想制作一个密度图,根据它们的集群着色,这样我就可以清楚地说明预期寿命集群与时代的关系。我会看看我能做什么。再次感谢!
    猜你喜欢
    • 2015-07-18
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    相关资源
    最近更新 更多