代码之家  ›  专栏  ›  技术社区  ›  melatonin

使用给定的模式高效地生成4列数字

r
  •  0
  • melatonin  · 技术社区  · 7 年前

    我想在R中生成一个由4列组成的数据帧,例如

    V1  V2  V3  V4
    10  10   9   9
    10  10   8   9
    10  10   7   9
    10  10   6   9
    10  10   5   9  
     9   9   8   8
     9   9   7   8
     9   9   6   8
     9   9   5   8
     9   9   4   8
     9   9   3   8
     8   8   7   7
    

    等等,直到v1和v2比它开始的时候小8(或整数)。同样,v1和v2在v3小于(或者说,某个任意整数)v1后减少1。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Roman    7 年前

    你可以试试 tidyverse 首先,必须设置列的起始条件 V1

    values = 10:8
    n=5:7
    

    然后创建其余的

    library(tidyverse)
    tibble(V1 = rep(values, n)) %>% 
      arrange(-V1) %>% 
      mutate(V2 = V1) %>% 
      group_by(V1) %>% 
      mutate(V3 =(max(V2)-1):(max(V2)-n()),
             V4 = max(V2)-1) %>% 
      ungroup()
    # A tibble: 18 x 4
          V1    V2    V3    V4
       <int> <int> <int> <dbl>
     1    10    10     9     9
     2    10    10     8     9
     3    10    10     7     9
     4    10    10     6     9
     5    10    10     5     9
     6     9     9     8     8
     7     9     9     7     8
     8     9     9     6     8
     9     9     9     5     8
    10     9     9     4     8
    11     9     9     3     8
    12     8     8     7     7
    13     8     8     6     7
    14     8     8     5     7
    15     8     8     4     7
    16     8     8     3     7
    17     8     8     2     7
    18     8     8     1     7