我需要在r中使用两列向量。在第一列中,我有日期,12/21/2011格式,我在第二列中有一个数字,255格式。
我需要选择一些我说的255,看它是否匹配我的第二列中的任何数字。如果匹配,我需要返回匹配的日期。
我知道匹配,计数,等等。我似乎无法把它放在一起。我是一个新手也许这有点超出我的能力,但我认为如果我学到了什么,我会更好。
问题中有一些部分匹配,但没有像我想要的那样详细。
如果有人有任何教导我的例子,我会非常高兴。如果你在书中有参考,我会自己做,如果你告诉我参考。
非常感谢你。我在Windows XP SP3环境中使用R 2.13.1。
答案 0 :(得分:2)
熟悉R中的索引将帮助您完成此任务(以及许多其他任务),而无需其他功能。要仅选择矩阵或数据框中的特定行和列,格式为x[rows,columns]
,其中rows
或columns
空白显示全部。
在您的情况下,这是我们可以做的。首先,让我们创建一个示例矩阵(注意'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
,在数据框中包含您的查找值列和日期列,然后将其与另一个具有您想要查找的值的数据框合并(或者一堆你想要查找的值)。默认情况下,它将返回一个数据框,其中只包含两个匹配的组的值,您可以设置参数以保留那些不匹配的参数,并且它们将具有缺失值以显示它们不匹配。