根据模式选择列

Aga*_*ain 2 r multiple-columns dataframe

可能重复: 从数据框中提取特定列

我有一个数据框遵循列中的模式.这里我有10列,但实际上在最终数据框中,列数不知道,因为它取决于给定的数据.

  V1    V2   V3          V4       V5   V6          V7     V8    V9          V10           
ADAM32  P 0.001000000   40.61038  P 0.001000000   40.61038  P 0.001000000   40.61038
CCL5    P 0.000491000 6546.20000  P 0.000491000 6546.20000  P 0.000491000 6546.20000
CILP2   A 0.500000024   92.66398  A 0.500000024   92.66398  A 0.500000024   92.66398
EPHB3   P 0.000562000  461.30000  P 0.000562000  461.30000  P 0.000562000  461.30000
GUCA1A  P 0.002006000    9.40000  P 0.002006000    9.40000  P 0.002006000    9.40000
HSPA6   P 0.000322000  564.00000  P 0.000322000  564.00000  P 0.000322000  564.00000
MAPK1   P 0.002000000  435.00000  P 0.002000000  435.00000  P 0.002000000  435.00000
PIGX    P 0.003822926  411.38856  P 0.003822926  411.38856  P 0.003822926  411.38856
PTPN21  M 0.051040220   94.30000  M 0.051040220   94.30000  M 0.051040220   94.30000
THRA    M 0.054470000  151.10000  M 0.054470000  151.10000  M 0.054470000  151.10000
UBA7    P 0.000468000  845.60000  P 0.000468000  845.60000  P 0.000468000  845.60000
WFDC2   P 0.005475547  177.61689  P 0.005475547  177.61689  P 0.005475547  177.61689
7-Mar   P 0.000673000  643.20000  P 0.000673000  643.20000  P 0.000673000  643.20000
Run Code Online (Sandbox Code Playgroud)

在上面的数据框中,我想要前两列,然后是两列之后的列,两列之后的列,依此类推.因此我想要v1,v2,v5,v8等,直到数据帧耗尽为止.因此,如果我在同一模式中有1000列的数据框,我该如何选择列?

预期产量:

     V1 V2  V5  V8
 ADAM32  P   P  P
   CCL5  P   P  P 
  CILP2  A   A  A
  EPHB3  P   P  P
 GUCA1A  P   P  P
  HSPA6  P   P  P
  MAPK1  P   P  P
   PIGX  P   P  P
 PTPN21  M   M  M
   THRA  M   M  M
   UBA7  P   P  P
  WFDC2  P   P  P
  7-Mar  P   P  P
Run Code Online (Sandbox Code Playgroud)

Col*_*vel 5

如果标准是仅选择非数字的colomuns,则可以使用filter:

Filter(Negate(is.numeric), df)
Run Code Online (Sandbox Code Playgroud)

关于虚拟数据的示例:

df = data.frame('a','b',1,2,'c',23,45.0,'c')
Filter(function(u) !is.numeric(u), df)
#  X.a. X.b. X.c. X.c..1
#1    a    b    c      c
Run Code Online (Sandbox Code Playgroud)

要选择第一列,第二列,第五列,第八列等,您还可以尝试:

df[,c(1,(1:ceiling(length(df)/3))*3-1)]
Run Code Online (Sandbox Code Playgroud)