Selecting multiple odd or even columns/rows for dataframe

喜夏-厌秋 提交于 2019-11-26 14:34:39

You can always generate sequences with seq:

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

Then,

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

When logical vectors are used for indexing, they are recycled so this gets you odd columns or odd rows

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

Even rows or columns:

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

Every third column:

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

I wish to add the tidyverse style approach to this problem, using the %% operator.

library(dplyr)
df <- data.frame(V1 = seq(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

You can use the same idea to delete every n-th row, of course. See here.

Use %% in combination with seq_len to create vector for indexing your data frame to find even and odds columns/rows

Try something like this:

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, ] )
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!