使用因子向量选择data.frame行

使用因子向量选择data.frame行,r,dataframe,row,R,Dataframe,Row,我有这样一个数据帧: > df # 1 2 3 4 5 6 7 8 9 10 # ENSG00000000003 2407 2345 1052 2191 2542 812 3595 4215 1100 5457 # ENSG00000000005 0 5 0 0 1 0 1 0 12 0 # ENSG00000000419 1843

我有这样一个数据帧:

> df
#                   1    2    3     4    5    6    7    8     9   10
# ENSG00000000003 2407 2345 1052  2191 2542  812 3595 4215  1100 5457
# ENSG00000000005    0    5    0     0    1    0    1    0    12    0
# ENSG00000000419 1843 1528 1520  1789 1144 1946 2017 2794  1455 2258
# ENSG00000000457  611  536  496   637  621  687  966  774   822 3026
# ENSG00000000460  453  493  884  1180  338  541  606  650   520 3479
# ENSG00000000938  249  296  995   113 1073  233  333 4441  2708  404
# ENSG00000000971 3570 1126 2431  1395 6452 7677 8222 1188 20762 4111
# ENSG00000001036 3774 1573 3323  1958 2029 2022 4236 1641  4195 1313
并希望选择以下基因:

genes <- c("ENSG00000000003", "ENSG00000000460", "ENSG00000001084")
用这个来纠正:

> df[as.vector(genes), ]
#                    1    2    3     4    5    6    7    8    9   10
# ENSG00000000003 2407 2345 1052  2191 2542  812 3595 4215 1100 5457
# ENSG00000000460  453  493  884  1180  338  541  606  650  520 3479
# ENSG00000001084 3705 6465 1803 49162 2018 1161 4621 8359 3375 2678
df的行名是字符串,但在另一个数据帧中,我与factors具有相同的名称。为了得到正确的结果,我必须始终将其作为.vector()输入


你能告诉我第一个结果的逻辑是什么吗

因子
是内部数字。因此,当您试图使用
factor
对数据帧进行子集划分时,它会返回数据帧的前3个结果。检查

(1:10)[factor(genes)] 
#[1] 1 2 3
所以这里从序列
1:10
返回前3个值

这也适用于数据帧

mtcars[factor(genes), ]
#              mpg cyl disp  hp drat   wt qsec vs am gear carb
#Mazda RX4     21.0   6  160 110 3.90 2.62 16.5  0  1    4    4
#Mazda RX4 Wag 21.0   6  160 110 3.90 2.88 17.0  0  1    4    4
#Datsun 710    22.8   4  108  93 3.85 2.32 18.6  1  1    4    1
如果
genes
是数据帧的行名,则可以通过执行以下操作直接对数据帧进行子集

df[genes, ]
df[genes, ]