在 R 中绘制直方图的整理时间间隔
Tidying Time Intervals for Plotting Histogram in R
我正在对 LifeTables
包中的 MLTobs
进行一些聚类分析,并且在 mlt.mx.info
数据帧中遇到了 Year
变量的棘手问题. Year
包含生命 table 的时间间隔。这是一个 table 的数据:
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
如您所见,一些区间位于其他区间内。谢天谢地 none 其中重叠。我想简化间隔,因此 1992-1994
和 1991-1994
等间隔都进入 1990-1994
.
一个想法可能是获取每个间隔的模数并以这种方式将它们分类为新的间隔,但我不确定如何使用间隔数据类型执行此操作。如果有人有任何想法,我将非常感谢您的帮助。最终我想创建一个直方图或条形图来很好地说明。
如果我理解你的问题,你会想要这样的东西:
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(以字符串形式;原来是整数类型,不知道如何解决)。这会做你想要的吗?仔细检查结果,但我觉得很合适。
我正在对 LifeTables
包中的 MLTobs
进行一些聚类分析,并且在 mlt.mx.info
数据帧中遇到了 Year
变量的棘手问题. Year
包含生命 table 的时间间隔。这是一个 table 的数据:
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
如您所见,一些区间位于其他区间内。谢天谢地 none 其中重叠。我想简化间隔,因此 1992-1994
和 1991-1994
等间隔都进入 1990-1994
.
一个想法可能是获取每个间隔的模数并以这种方式将它们分类为新的间隔,但我不确定如何使用间隔数据类型执行此操作。如果有人有任何想法,我将非常感谢您的帮助。最终我想创建一个直方图或条形图来很好地说明。
如果我理解你的问题,你会想要这样的东西:
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(以字符串形式;原来是整数类型,不知道如何解决)。这会做你想要的吗?仔细检查结果,但我觉得很合适。