Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 为数据帧选择多个奇数或偶数列/行_R_Dataframe_Pca - Fatal编程技术网

R 为数据帧选择多个奇数或偶数列/行

R 为数据帧选择多个奇数或偶数列/行,r,dataframe,pca,R,Dataframe,Pca,在R中是否有方法选择许多非连续的行/列,即奇数或偶数行/列 我正在绘制荷载图,以便进行主成分分析。我有84行数据按如下顺序排列:x_1 y_1 x_2。。。。。x_42 y_42 目前,我正在为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

在R中是否有方法选择许多非连续的行/列,即奇数或偶数行/列

我正在绘制荷载图,以便进行主成分分析。我有84行数据按如下顺序排列:x_1 y_1 x_2。。。。。x_42 y_42

目前,我正在为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])
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, ] )
当然有更简单的方法可以做到这一点吗?

将%%与seq_len结合使用,创建用于索引数据帧的向量,以查找偶数和赔率列/行

试着这样做:

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

您始终可以使用seq生成序列:

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


当逻辑向量用于索引时,它们被循环使用,这样就可以得到奇数列或奇数行

 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 , ....
最近的一位评论者声称,这已经不起作用了。我没有发现在Ubuntu上运行的R4.0.4中:

> d <- data.frame(as.list(1:10))  # simple example construction
> d
  X1L X2L X3L X4L X5L X6L X7L X8L X9L X10L
1   1   2   3   4   5   6   7   8   9   10
> d[, c(TRUE,FALSE)]
  X1L X3L X5L X7L X9L
1   1   3   5   7   9
> d[, c(TRUE,FALSE,FALSE)]  # example: # of columns not exact multiple of length of logical vector
  X1L X4L X7L X10L
1   1   4   7   10
我希望使用%%运算符添加tidyverse样式的方法来解决此问题

library(dplyr)
df <- data.frame(V1 = seq(26), V2 = letters)

df %>% filter(row_number() %% 2 == 0) ## Select even rows
df %>% filter(row_number() %% 2 == 1) ## Select odd rows
df %>% filter(row_number() %% 3 == 1) ## Select every 3rd row starting from first row

当然,您可以使用相同的方法删除第n行中的每一行。请参阅。

查看?seq请注意,您正在谈论选择列,但您的代码从列1中选择行。请选择最佳答案。如果N在每N列/行中变大,则cTRUE、repFALSE、7(其中7为N-1)可作为可读且简明的替代方案。您能解释上述代码吗?calld[!cTRUE,FALSE,]@Standin.Wolf:不确定哪一部分让你困惑。这个基本上反转逻辑向量,因此它实际上意味着:在R4.0.0中calld[cFALSE,TRUE,]非常不幸的是,语法'calld[,!cTRUE,FALSE]`不再有效。您必须准确地指定要重复的正确列数或行数。@AgileBean:我刚刚在一个简单的10列数据帧上再次测试了它,它似乎对我有效。如果你仍然看到证据表明没有遵守R的不寻常的特性,即通过隐式重复循环来扩展向量,那么你需要发布一个反例。我不明白为什么对于选择奇偶行或列的问题,人们接受的答案是生成奇数或偶数。