在R

时间:2015-04-25 19:15:26

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

我正在对MLTobs软件包中的LifeTables进行一些集群分析,并且Year数据框中的mlt.mx.info变量遇到了棘手的问题。 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

一个想法可能是获取每个区间的模数并按照这种方式将它们分类到新的区间中,但我不确定如何使用区间数据类型执行此操作。如果有人有任何想法,我真的很感激帮助。最后,我想创建一个直方图或条形图来很好地说明。

1 个答案:

答案 0 :(得分: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)

这样做,它会创建分档,并输出一个新的列(new_year),它是bin的底部。因此,从1750-1754开始的所有内容都将对应于1750-1754的新值(以字符串形式;原始类型为整数,不确定如何修复)。这样做你想要的吗?仔细检查结果,但它看起来对我来说。