2014-06-26 87 views
14

R有没有办法选择许多不连续的奇数或偶数行/列?为数据帧选择多个奇数或偶数列/行

我正在绘制主成分分析的加载图。我有84行排列像这样的数据:x_1y_1x_2 ..... x_42y_42

而此刻我创造x和y负荷的数字是这样的dataframes:

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

当然有更简单的方法来做到这一点?

+0

查看'?seq' – alko989

+1

请注意,您正在讨论选择列,但您的代码选择行f ROM列1. –

+0

谢谢,我已更改帖子以反映此。 – dmt

回答

20

您可以随时生成序列序列:

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

然后,

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

使用%%与​​组合来创建索引数据帧寻找甚至和赔率列/行

尝试是这样的载体:

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

当逻辑载体用于索引,它们被回收所以这让你奇数列或奇数行

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 , .... 
+0

贝斯特回答。如果N在“每第N列/行”变大,则可以使用c(TRUE,rep(FALSE,7))(其中7为N-1)作为可读和简明的替代方案。 –

+0

这真是太棒了 –

+0

你能解释上面的代码?calld [!c(TRUE,FALSE),] –