Ответ 1
Вы всегда можете генерировать последовательности с помощью seq:
even_indexes<-seq(2,42,2)
odd_indexes<-seq(1,41,2)
Затем
x.loadings <- data.frame(x=data.pc$loadings[odd_indexes,1])
Есть ли способ в R выбрать много не последовательных ячеек или четных строк/столбцов?
Я рисую нагрузки для моего анализа основных компонентов. У меня есть 84 строки данных, упорядоченных следующим образом: x_1
y_1
x_2
..... x_42
y_42
И на данный момент я создаю dataframes для данных загрузки x и y следующим образом:
data.pc = princomp(as.matrix(data))
x.loadings <- data.frame(x=data.pc$loadings[c(1, 3, 5, 7, 9, 11, 13 ,15, 17, 19,
21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41), 1])
yloadings <- data.frame(y=data.pc$loadings[c(2, 4, 6, 8, 10, 12, 14, 16, 18, 20,
22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42), 1])
Конечно, есть ли более простой способ сделать это?
Вы всегда можете генерировать последовательности с помощью seq:
even_indexes<-seq(2,42,2)
odd_indexes<-seq(1,41,2)
Затем
x.loadings <- data.frame(x=data.pc$loadings[odd_indexes,1])
Когда логические векторы используются для индексирования, они перерабатываются, поэтому вы получаете нечетные столбцы или нечетные строки
calld[ c(TRUE,FALSE), ] # rows
calld[ , c(TRUE,FALSE) ] #columns
Четные строки или столбцы:
calld[ !c(TRUE,FALSE), ] # rows
calld[ , !c(TRUE,FALSE) ] #columns
Каждый третий столбец:
calld[ , c(TRUE,FALSE, FALSE) ] #columns 1,4,7 , ....
Используйте %%
в сочетании с seq_len
, чтобы создать вектор для индексирования вашего фрейма данных, чтобы найти четные и кодовые столбцы/строки
Попробуйте что-то вроде этого:
even <- seq_len(ncol(data.pc)) %% 2 # index
x.loadings <- data.frame(x=data.pc$loadings[even, ])
y.loadings <- data.frame(x=data.pc$loadings[!even, ] )