创建一个函数将连续数据放入离散的箱中

时间:2015-06-10 18:21:21

标签: r function for-loop

我正在尝试创建一个函数,将连续数据放入离散(用户定义)的箱中进行绘图和分析。我必须为许多变量执行此操作,这些变量都需要以不同的间隔设置不同数量的二进制数,并且我发现自己一遍又一遍地编写非常相似的代码(见下文),这就是我想出一个函数的原因可以写。另外,我很好奇是否有办法让循环进一步简化代码。

代码我一次又一次地写作(我已经写过类似的代码,在垃圾箱中放置1-10个评级)

    decade <-
            ifelse(Year >= 1940 & Year < 1950, Decade <- "1940's",
            ifelse(Year >= 1950 & Year < 1960, Decade <- "1950's",
            ifelse(Year >= 1960 & Year < 1970, Decade <- "1960's",
            ifelse(Year >= 1970 & Year < 1980, Decade <- "1970's",
            ifelse(Year >= 2010 & Year < 2020, Decade <- "2010's",
            ifelse(Year >= 1980 & Year < 1990, Decade <- "1980's",
            ifelse(Year >= 1990 & Year < 2000, Decade <- "1990's",
            ifelse(Year >= 2000 & Year < 2010, Decade <- "2000's",
        NA))))))))

我尝试某项功能(无效)

    bins <- function (variable, binName, b1, b2, b3, b4, b5, b6, b7, b8, b9=NULL, b10=NULL) {
        binname <- (
            ifelse(variable >= b1 & variable < b2, binName <- paste(b1, 's'),
            ifelse(variable >= b2 & variable < b3, binName <- paste(b2, 's'),
            ifelse(variable >= b3 & variable < b4, binName <- paste(b3, 's'),
            ifelse(variable >= b4 & variable < b5, binName <- paste(b4, 's'),
            ifelse(variable >= b5 & variable < b6, binName <- paste(b5, 's'),
            ifelse(variable >= b6 & variable < b7, binName <- paste(b6, 's'),
            ifelse(variable >= b7 & variable < b8, binName <- paste(b7, 's'),
            ifelse(variable >= b8 & variable < b9, binName <- paste(b8, 's'),
        NA)))))))))         }

    bins(Year, decade1, 1940, 1950, 1960, 1970, 1980, 1990, 2000, 2010, 2020)

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

非常感谢 - 并为这是一个常见问题解答道歉(我之前做过搜索......只是找不到合适的答案)。

切割效果很好。

YearBins = paste(seq(1940, 2010, 10),"'s")
Decade <- cut(Year, seq(1940, 2020, 10), labels = YearBins)
#"Year" being the original continuous data, "Decade" being the new,bin'ed data.