• R语言
  • 请问如何用R语言,对一列数按照从上到下,元素和大致相等,分成十份

13520982976 建议你真的多看两眼左上角的新手须知,把自己的发帖整的清楚漂亮些,这样可以减少对话次数,提高效率,节约彼此的时间

    Cloud2016 请问如何指定某列呢?因为我的数据有很多列,需要根据不同列分组

    dapengde 您好,如果我有多个列,想按照不同的列进行分组,那么如何指定某个列呢,您给的答案特别好,就是没有指定某个列,所以希望您能给一些提示。

      6 天 后

      dapengde 你好,你的代码好像运行不了,而且给的第一个代码好像没有逻辑,不知讲的是什么,希望您能多指教,我希望就是按某一列原来的顺序,分成四份,第一份的元素和基本相等。

      dapengde 你的代码运行的结果不是我期望的,如果分成三份,两份,那么他们的元素和会基本一样吗,显然,你的运算是按我的结果算的,并不是按要求进行的。

        tctcab

        a <- c(2,3,1,4,2,2)
        
        
        # 把这组数分成三份
        # 每一份的元素和基本相等
        # 想要的结果是 b<- c(1,1,2,2,3,3)
        # 因为前两个和中间两个和后三个的和基本相等
        
        
        a <- c(2,3,1,4,2,2)
        a1 <- cumsum(a)
        a1
        n=3
        for(z in 1:n){
          for(i in 1:length(a1)){
            if(a1[i] <= a1[which(abs(a1-sum(a)/n)==min(abs(a1-sum(a)/n)))]*z)print(z)
          }
        }

        这是我试着写的,有一些错误,希望您能帮个忙

          13520982976

          使用cumsum(a)/n的思路大方向是对的,试试这个:

          library(tidyverse)
          
          # data
          set.seed(123)
          a = c(2,3,1,4,2,2)
          
          # number of groups
          n =3
          
          # divide a into n groups using cut
          
          grp = as.numeric(cut(cumsum(a), n))
          
          # result
          df = data.frame(a=a, grp = grp)
          
          result.df = df %>%
            group_by(grp) %>%
            mutate(grpsum = sum(a))
          
          result.df
          #> # A tibble: 6 x 3
          #> # Groups:   grp [3]
          #>       a   grp grpsum
          #>   <dbl> <dbl>  <dbl>
          #> 1     2     1      6
          #> 2     3     1      6
          #> 3     1     1      6
          #> 4     4     2      4
          #> 5     2     3      4
          #> 6     2     3      4

          <sup>Created on 2019-03-05 by the reprex package (v0.2.1)</sup>

          你需要的分组用 grp = as.numeric(cut(cumsum(a), n))应该够了

          不过这个分组跟你的112233稍微不一样,在我测试100个元素时,肉眼看了一下每组的和还是大致均匀。