首页 > 解决方案 > 使用给定模式有效地生成 4 列数字

问题描述

我想在 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(或某个整数)。此外,在 v3 比 v1 小 5(或再次,某个任意整数)后, v1 和 v2 减 1。

标签: r

解决方案


您可以尝试一个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

推荐阅读