Выберите каждую n-ю строку, сдвиньте начало и повторите - PullRequest
1 голос
/ 17 октября 2019

Я пытаюсь создать новый столбец в 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 семья.

Ответы [ 2 ]

2 голосов
/ 17 октября 2019

Вы можете использовать дуальность матрицы / вектора 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
2 голосов
/ 17 октября 2019

следующих работ:

n <- 9
df$nineth <- unlist(lapply(1:(n-1), 
                           function(x){
                             df$Row[seq(x, nrow(df),by=n-1)]}))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...