使用因子向量选择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, ]