【问题标题】:Select every nth row, offset the start and repeat选择每第 n 行,偏移开始并重复
【发布时间】:2020-02-14 18:51:52
【问题描述】:

我正在尝试在 data.frame 中创建一个新列,该列是通过选择从第一行开始的列的第 9 行(即第 1 行、第 9 行、第 17 行)创建的。一旦它到达列的第 n 行,我需要它从第 2 行开始重复此过程(选择第 2 行、第 10 行、第 18 行)。我的行数固定为 96,所以我需要它重复,直到它从第 9 行开始,然后退出。

这是我想做的一个例子:

df <- data.frame(Row=1:96)
> df$nineth <- c(1,9,17,25,33,41,49,57,65,73,81,89,2,10,18,26,34,42,50,58,66,74,82,90)
> print(df)
   Row nineth
1    1      1
2    2      9
3    3     17
4    4     25
5    5     33
6    6     41
7    7     49
8    8     57
9    9     65
10  10     73
11  11     81
12  12     89
13  13      2
14  14     10
15  15     18
16  16     26
17  17     34
18  18     42
19  19     50
20  20     58
21  21     66
22  22     74
23  23     82
24  24     90

有没有办法使用for 循环来做到这一点?我比apply家人更熟悉他们。

【问题讨论】:

    标签: r for-loop apply lapply


    【解决方案1】:

    以下作品:

    n <- 9
    df$nineth <- unlist(lapply(1:(n-1), 
                               function(x){
                                 df$Row[seq(x, nrow(df),by=n-1)]}))
    

    【讨论】:

      【解决方案2】:

      您可以使用 R 的矩阵/向量对偶性轻松做到这一点...

      df <- data.frame(Row=1:96)
      
      df$nineth <- as.vector(matrix(df$Row, byrow = TRUE, ncol = 8))
      
      head(df,15)
         Row nineth
      1    1      1
      2    2      9
      3    3     17
      4    4     25
      5    5     33
      6    6     41
      7    7     49
      8    8     57
      9    9     65
      10  10     73
      11  11     81
      12  12     89
      13  13      2
      14  14     10
      15  15     18
      

      【讨论】:

        猜你喜欢
        • 2013-07-29
        • 1970-01-01
        • 2018-09-02
        • 2020-07-27
        • 2022-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多