我有一个包含6列的矩阵X1
。此X1
矩阵中的第3列包含RouteNo
。我还有一个从另一个矩阵中提取的向量V1
。此向量中的少数值与RouteNo
中的X1
匹配。任务是从矩阵X1
中获取子集,其中RouteNo
的{{1}}与X1
的{{1}}匹配。 RouteNo
比矩阵V1
中包含额外V1
。
RouteNo
我尝试使用X1
功能,但我没有得到理想的结果。我希望得到如下矩阵
> X1
V1 V2 V3 V4 V5 V6
1 1 2 84072082 1 2000 0
2 2 2 84046006 1 2000 0
3 3 2 84046006 1 2001 0
4 4 2 84046006 1 2002 0
5 5 2 84021002 1 2002 0
6 6 2 84021002 1 2003 0
7 7 2 84021002 1 2003 0
8 8 2 84021002 1 2004 0
9 9 2 84021002 1 2005 0
10 10 2 84021002 1 2005 0
11 11 2 12468015 1 2006 0
12 12 2 12468015 1 2007 0
13 96 2 12468015 2 2000 0
> V1
[1] 84021001 84021002 84021105 84046006 84046007 84046008 84046009 84046011 84046013 84046014
> n2 = subset(X1, subset = X1[,3] %in% V1)
> dim(n2)
[1] 0 6
还有其他方法可以获得结果吗?任何帮助表示赞赏。提前谢谢。
答案 0 :(得分:4)
您遇到了范围问题。您的data.frame V1
中有一个名为x1
的列。将查找向量更改为不是列名的名称,一切都应该没问题,即:
subset(x1, V3 %in% v1)
或使用[
直接索引
x1[x1$V3 %in% V1,]
证据在布丁中:
txt1 <- " V1 V2 V3 V4 V5 V6
1 1 2 84072082 1 2000 0
2 2 2 84046006 1 2000 0
3 3 2 84046006 1 2001 0
4 4 2 84046006 1 2002 0
5 5 2 84021002 1 2002 0
6 6 2 84021002 1 2003 0
7 7 2 84021002 1 2003 0
8 8 2 84021002 1 2004 0
9 9 2 84021002 1 2005 0
10 10 2 84021002 1 2005 0
11 11 2 12468015 1 2006 0
12 12 2 12468015 1 2007 0
13 96 2 12468015 2 2000 0"
txt2 <- "84021001 84021002 84021105 84046006 84046007 84046008 84046009 84046011 84046013 84046014"
x1 <- read.table(textConnection(txt1))
#Note the lowercase
v1 <- read.table(textConnection(txt2))
#Make "V1" as you have it
V1 <- v1
> #Bad
> dim(subset(x1, V3 %in% V1))
[1] 0 6
> #Good
> dim(subset(x1, V3 %in% v1))
[1] 9 6
#Does subset method equal the direct indexing method
> all.equal(subset(x1, V3 %in% v1),x1[x1$V3 %in% V1,])
[1] TRUE