【问题标题】:Split dataframe into X groups from 0 to 1 based on column values根据列值将数据框拆分为从 0 到 1 的 X 组
【发布时间】:2020-08-24 09:23:39
【问题描述】:

我对 R 相当陌生,找不到解决问题的简洁方法。

我在 R 中有一个名为 df 的数据框,看起来像这样。它包含一个名为 values 的列,其中包含按数字顺序排列的 0 到 1 的值,以及一个名为 flag 的二进制列,其中包含 0 或 1。

df
value     flag
0.033     0
0.139     0
0.452     1
0.532     0
0.687     1
0.993     1

我希望将此数据帧拆分为从 0 到 1 的 X 个组,将 values 列分箱。例如,如果我希望进行 4 拆分分组,则数据将从 0-0.25、0.25-0.5、0.5-0.75、0.75-1 拆分。该数据还将包含该点的相应标志。

答案应仅使用 DATAFRAME 格式作为输入,仅使用此问题中所述的列,并且仅使用来自 TIDYVERSE、CARET 或 DATA.TABLE 的包。

我希望解决方案具有可扩展性,因此如果我希望将其分成更多组,那么我可以。

有人对此有解决方案吗?谢谢

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    我看不出你之前得到的答案是如何不可扩展的,他们使用没有包的原生 R...如果n 是你想要的分区数:

    n = 4
    L = seq(1,n)/n
    
    GroupedList = lapply(L,function(x){
                     df[(df$value < x) & (df$value > (x-(1/n))),]
                   })
    

    【讨论】:

      【解决方案2】:

      也许cut() 函数可以帮助你?这会将数值列的范围划分为自定义数量的间隔:

      n <- 4
      breaks <- seq(0, 1, by = 1/n)
      
      df$group <- cut(df$value, breaks = breaks)
      
      

      【讨论】:

      • 这不起作用,因为我的列由于数据而分成不均匀的组。如果我尝试这个,对于我的特定数据,第一个分组是 -0.022 到 0.23,这不是问题想要的。
      • 我已经编辑了答案,使组是均匀的。我猜这种格式(数据框)比列表更有用...
      猜你喜欢
      • 1970-01-01
      • 2015-01-15
      • 2019-12-25
      • 1970-01-01
      • 2016-05-02
      • 2022-06-15
      相关资源
      最近更新 更多