可能重复: Extracting specific columns from a data frame
我的数据框遵循列中的模式。这里我有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
在上面的数据框中,我想要前两列,然后是两列之后的列,两列之后的列,依此类推。因此我想要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
答案 0 :(得分:5)
如果标准是仅选择非数字的colomuns,则可以使用filter:
Filter(Negate(is.numeric), df)
关于虚拟数据的示例:
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
要选择第一列,第二列,第五列,第八列等,您还可以尝试:
df[,c(1,(1:ceiling(length(df)/3))*3-1)]
答案 1 :(得分:2)
seq
函数可以通过以下方式帮助解决此问题:
df <- read.table('clipboard',header=T)
df[, c(1,2,seq(5,ncol(df),3))]
V1 V2 V5 V8
1 ADAM32 P P P
2 CCL5 P P P
3 CILP2 A A A
4 EPHB3 P P P
5 GUCA1A P P P
6 HSPA6 P P P
7 MAPK1 P P P
8 PIGX P P P
9 PTPN21 M M M
10 THRA M M M
11 UBA7 P P P
12 WFDC2 P P P
13 7-Mar P P P
基本上seq
可以根据需要创建序列,即从5开始直到列总数,并且每两列返回一个列索引。在这里我只是添加了你想要的第一和第二列。