Seleccionar múltiples columnas / filas impares o parejas para el dataframe

¿Hay alguna manera en R de seleccionar muchas filas / columnas no consecutivas, es decir, impares o pares?

Estoy trazando las cargas para mi análisis de componentes principales. Tengo 84 filas de datos ordenados de esta manera: x_1 y_1 x_2 ….. x_42 y_42

Y en este momento estoy creando los cuadros de datos para las cifras de cargas x e y como esta:

 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]) 

Seguramente hay una manera más fácil de hacer esto?

Siempre puedes generar secuencias con seq:

 even_indexes< -seq(2,42,2) odd_indexes<-seq(1,41,2) 

Entonces,

  x.loadings < - data.frame(x=data.pc$loadings[odd_indexes,1]) 

Cuando se usan vectores lógicos para indexar, se reciclan, por lo que se obtienen columnas impares o filas impares

  calld[ c(TRUE,FALSE), ] # rows calld[ , c(TRUE,FALSE) ] #columns 

Incluso filas o columnas:

  calld[ !c(TRUE,FALSE), ] # rows calld[ , !c(TRUE,FALSE) ] #columns 

Cada tercera columna:

  calld[ , c(TRUE,FALSE, FALSE) ] #columns 1,4,7 , .... 

Use %% en combinación con seq_len para crear un vector para indexar su dataframe para encontrar columnas y filas pares y de probabilidades

Pruebe algo como esto:

 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, ] ) 

Deseo agregar el tidyverse estilo tidyverse a este problema, usando el operador %% .

 library(dplyr) df < - data_frame(V1 = seq(1, 26), V2 = letters) df %>% dplyr::filter(row_number() %% 2 == 0) ## Select even rows df %>% dplyr::filter(row_number() %% 2 == 1) ## Select odd rows df %>% dplyr::filter(row_number() %% 3 == 1) ## Select every 3rd row starting from first row 

Puede usar la misma idea para eliminar cada n-ésima fila, por supuesto. Mira aquí .