R编程:提取行和相邻行

R编程:提取行和相邻行,r,extract,output,rows,R,Extract,Output,Rows,因此,我在R中有两个数据集: 表1和表2 这是2.CSV文件,第一列名为Date。 然而,大多数日期是不同的,但有些是相同的 我想做的是匹配两个表中相同的日期列中的单元格,然后从包含该单元格的行开始,我想 在10个不同的表中返回它前面的5行和后面的5行。 因此,每一行都会转到不同的新输出表 基本上,我希望在第I行的每个表上运行一个回归,在该表中还有其他列 我在考虑使用head()和tail(),但我想不出从哪里开始的索引部分 多谢各位。 这是一个简单的例子。当将表1中的第3行与表2中的第1行进行

因此,我在R中有两个数据集: 表1和表2

这是2.CSV文件,第一列名为Date。 然而,大多数日期是不同的,但有些是相同的

我想做的是匹配两个表中相同的日期列中的单元格,然后从包含该单元格的行开始,我想 在10个不同的表中返回它前面的5行和后面的5行。 因此,每一行都会转到不同的新输出表

基本上,我希望在第I行的每个表上运行一个回归,在该表中还有其他列

我在考虑使用head()和tail(),但我想不出从哪里开始的索引部分

多谢各位。 这是一个简单的例子。当将表1中的第3行与表2中的第1行进行匹配时,我将如何获取该匹配行下面的表1中的3行

>table 1
>Date      price1  price2  price3  
>11/02/13   4.4        4.22    4.12  
>11/04/13   4.23       4.09    4.10
>12/01/13   4.01       4.27    4.14
>12/02/13   4.1        4.23    4.16
>12/02/13   4.65       4.23    4.17
>11/01/13   4.4        4.22    4.12
>11/07/13   4.23       4.09    4.10
>12/09/13   4.01       4.27    4.14
>12/12/13   4.1        4.23    4.16
>12/15/13   4.65       4.23    4.17

>table 2
>Date      price1  price2  price3
>12/01/13   2.4        2.22    9.12
>08/04/13   4.23       7.09    6.10
>12/01/13   1.01       6.27    6.14
>12/08/13   6.1        3.23    4.16
>12/05/13   4.65       2.23    3.17
>11/02/13   4.4        4.22    4.12
>07/04/13   4.23       4.09    4.10
>09/01/13   4.01       4.27    4.14
>01/02/13   4.1        4.23    4.16
>11/05/13   4.65       4.23    4.17

使用您提供的示例数据:

table1 <- read.table(header=TRUE,text="
Date      price1  price2  price3  
11/02/13   4.4        4.22    4.12  
11/04/13   4.23       4.09    4.10
12/01/13   4.01       4.27    4.14
12/02/13   4.1        4.23    4.16
12/02/13   4.65       4.23    4.17
11/01/13   4.4        4.22    4.12
11/07/13   4.23       4.09    4.10
12/09/13   4.01       4.27    4.14
12/12/13   4.1        4.23    4.16
12/15/13   4.65       4.23    4.17
")

table2 <- read.table(header=TRUE,text="
Date      price1  price2  price3
12/01/13   2.4        2.22    9.12
08/04/13   4.23       7.09    6.10
12/01/13   1.01       6.27    6.14
12/08/13   6.1        3.23    4.16
12/05/13   4.65       2.23    3.17
11/02/13   4.4        4.22    4.12
07/04/13   4.23       4.09    4.10
09/01/13   4.01       4.27    4.14
01/02/13   4.1        4.23    4.16
11/05/13   4.65       4.23    4.17
")
结果是一个列表,其中每个元素被命名为
NeighX
NeighX
,分别指示下面或上面的相邻行
X
。默认情况下有11个元素,如果您只需要10个,请忽略
Neigh0
,它表示与所示行完全匹配的行


您可以将结果保存在一个列表对象中,比如,
L请勾选:ok。成功了。谢谢。那么只返回第五排怎么样?还是第四等等。。?而不是上面的5?只有一个选择了一个thanks@Rmything如果你有不同的问题,请发表一篇新的帖子,而不是拒绝一个有效的答案。事实上,这是我问的问题,但他只回答了其中的一部分。但是你的努力是对的,我不应该不接受!我只是不确定如何查看该详细信息。谢谢您的评论。@Rmything,很抱歉,我没有注意到您希望将行分散在不同的表中。我将编辑答案。还有一个问题:如何处理重复项?假设您匹配了第1行和第3行。邻居是0:6和0:8?并不是所有的桌子都满了…好吧,随便什么对你来说更容易。实际上,假设两个表之间有30个匹配项,也就是说,如果一行与表2中的另一行完全匹配,那么这个匹配项将创建10个表,对吗?如果我们在第二桌有1场以上的比赛,那么我们可以忽略它或不忽略它。因此,如果最后两个表之间有30个匹配项,我们实际上会得到10个表,每个表有30行。例如:上面第5行,因为所有30个匹配项都会得到一个表(30行)。第4行也是如此。等等。。非常感谢你在这件事上花时间。我刚开始做R,这样的任务很棘手。谢谢
mydates <- merge(table1, table2, by="Date")$Date
getneighbors <- function(table, x, neigh=5){
    r <- -neigh:neigh
    lines <- which(table[,1] %in% x)
    o <- outer(lines, r, `+`)
    a <- apply(o, 2, pmin, nrow(table))
    a <- apply(a, 2, pmax, 1)
    L <- lapply(seq(ncol(a)), function(j)table[a[,j],])
    names(L) <- gsub("-","_",paste0("Neigh",r))
    L
}
> getneighbors(table1, mydates)

$Neigh_5
        Date price1 price2 price3
1   11/02/13    4.4   4.22   4.12
1.1 11/02/13    4.4   4.22   4.12

$Neigh_4
        Date price1 price2 price3
1   11/02/13    4.4   4.22   4.12
1.1 11/02/13    4.4   4.22   4.12

$Neigh_3
        Date price1 price2 price3
1   11/02/13    4.4   4.22   4.12
1.1 11/02/13    4.4   4.22   4.12

$Neigh_2
        Date price1 price2 price3
1   11/02/13    4.4   4.22   4.12
1.1 11/02/13    4.4   4.22   4.12

$Neigh_1
      Date price1 price2 price3
1 11/02/13   4.40   4.22   4.12
2 11/04/13   4.23   4.09   4.10

$Neigh0
      Date price1 price2 price3
1 11/02/13   4.40   4.22   4.12
3 12/01/13   4.01   4.27   4.14

$Neigh1
      Date price1 price2 price3
2 11/04/13   4.23   4.09   4.10
4 12/02/13   4.10   4.23   4.16

$Neigh2
      Date price1 price2 price3
3 12/01/13   4.01   4.27   4.14
5 12/02/13   4.65   4.23   4.17

$Neigh3
      Date price1 price2 price3
4 12/02/13    4.1   4.23   4.16
6 11/01/13    4.4   4.22   4.12

$Neigh4
      Date price1 price2 price3
5 12/02/13   4.65   4.23   4.17
7 11/07/13   4.23   4.09   4.10

$Neigh5
      Date price1 price2 price3
6 11/01/13   4.40   4.22   4.12
8 12/09/13   4.01   4.27   4.14