【问题标题】:Creating a function to put continuous data into discrete bins创建一个将连续数据放入离散箱的函数
【发布时间】:2015-06-10 18:21:20
【问题描述】:

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

我一次又一次地编写代码(我编写了类似的代码,将 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)

感谢您的帮助!

【问题讨论】:

  • 在休息时使用cut。 i.c .cut(Year, breaks= c(-Inf,seq(1940, 2010, by=10), Inf)) 并指定 labels
  • 不。使用findIntervalcut。这实际上是关于 SO 现在的常见问题解答。已经问了很多次了。

标签: r function for-loop


【解决方案1】:

非常感谢 - 很抱歉这是一个常见问题解答(我之前搜索过......只是找不到正确的答案)。

Cut 效果很好。

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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 2018-03-21
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    相关资源
    最近更新 更多