使用r读取2列向量的元素并返回与相应的第1列名称匹配

时间:2011-12-20 21:15:35

标签: r

我需要在r中使用两列向量。在第一列中,我有日期,12/21/2011格式,我在第二列中有一个数字,255格式。

我需要选择一些我说的255,看它是否匹配我的第二列中的任何数字。如果匹配,我需要返回匹配的日期。

我知道匹配,计数,等等。我似乎无法把它放在一起。我是一个新手也许这有点超出我的能力,但我认为如果我学到了什么,我会更好。

问题中有一些部分匹配,但没有像我想要的那样详细。

如果有人有任何教导我的例子,我会非常高兴。如果你在书中有参考,我会自己做,如果你告诉我参考。

非常感谢你。我在Windows XP SP3环境中使用R 2.13.1。

3 个答案:

答案 0 :(得分:2)

熟悉R中的索引将帮助您完成此任务(以及许多其他任务),而无需其他功能。要仅选择矩阵或数据框中的特定行和列,格式为x[rows,columns],其中rowscolumns空白显示全部。

在您的情况下,这是我们可以做的。首先,让我们创建一个示例矩阵(注意'2列向量'实际上是一个矩阵):

x <- cbind(c("12/11/11", "12/10/11", "10/16/11",
 "11/07/11"), c(1, 255, 3, 255))

#     [,1]       [,2] 
#[1,] "12/11/11" "1"  
#[2,] "12/10/11" "255"
#[3,] "10/16/11" "3"  
#[4,] "11/07/11" "255"

在行索引中使用逻辑向量,只能返回包含特定值的行。例如,这是第2列= 255的任何行的逻辑向量:

x[,2] == 255

#[1] FALSE  TRUE FALSE  TRUE

将此逻辑向量插入行索引将仅返回标记为TRUE的行。

x[x[,2]==255,]

#     [,1]       [,2] 
#[1,] "12/10/11" "255"
#[2,] "11/07/11" "255"

要仅显示日期,请在索引中指定第1列:

x[x[,2]==255,1]

#[1] "12/10/11" "11/07/11"

答案 1 :(得分:0)

您可能希望查看subset()。

> x1 <- rnorm(20)*10
> y1 <- rnorm(20)*5
> z1 <- cbind(round(abs(x1),0), round(abs(y1),0)) ## just creates 2 columns of data.
> z1 
      [,1] [,2]
 [1,]    9    1
 [2,]    6    6
 [3,]    3    7
 [4,]   10    0
 [5,]    9    2
 [6,]    7    7
 [7,]    7   10
 [8,]    3    1
 [9,]    6   10
[10,]    6    5
[11,]    0   11
[12,]    5    0
[13,]    0    8
[14,]    2    4
[15,]    1    2
[16,]    3    3
[17,]    9    7
[18,]   12    4
[19,]    1    1
[20,]    6    3
> ss1 <- subset(z1, z1[,2]==2) ## creates subset of 'z1' where column 2 equals 2.
> ss1    ## shows contents of ss1
     [,1] [,2]
[1,]    9    2
[2,]    1    2

答案 2 :(得分:0)

还要考虑使用merge,在数据框中包含您的查找值列和日期列,然后将其与另一个具有您想要查找的值的数据框合并(或者一堆你想要查找的值)。默认情况下,它将返回一个数据框,其中只包含两个匹配的组的值,您可以设置参数以保留那些不匹配的参数,并且它们将具有缺失值以显示它们不匹配。