2

有一个 ID 和列 y1、y2、...的数据文件

> dat
   id y1 y2 y3 y4 y5
1   1  2  4  2  3  4
2   2  4  1  1  4  4
3   3  2  3  1  3  1
4   4  0  1  2  4  4
5   5  3  3  2  1  4
6   6  4  1  3  1  4
7   7  2  4  4  4  0
8   8  2  5  0  2  5
9   9  2  2  3  3  1
10 10  0  3  4  4  3

有一个包含 ID 子集和周数的示例文件。

> sam
  id week
1  2    3
2  4    4
3  6    4
4  7    5
5  8    5

我想根据周数为每个采样的 ID分配一个y值。dat这是我想要达到的结果:

> res
  id y
1  2 1
2  4 4
3  6 1
4  7 0
5  8 5

可以通过一些循环来实现结果,但如果可能的话,我想避免它。

dat和的结构sam

dat <- structure(list(id = 1:10,
    y1 = c(2, 4, 2, 0, 3, 4, 2, 2, 2, 0),
    y2 = c(4, 1, 3, 1, 3, 1, 4, 5, 2, 3),
    y3 = c(2, 1, 1, 2, 2, 3, 4, 0, 3, 4),
    y4 = c(3, 4, 3, 4, 1, 1, 4, 2, 3, 4),
    y5 = c(4, 4, 1, 4, 4, 4, 0, 5, 1, 3)),
  .Names = c("id", "y1", "y2", "y3", "y4", "y5"),
  row.names = c(NA, -10L),
  class = "data.frame")

sam <- structure(list(id = c(2L, 4L, 6L, 7L, 8L),
    week = c(3L, 4L, 4L, 5L, 5L)),
  .Names = c("id", "week"),
  row.names = c(NA, -5L),
  class = "data.frame")
4

1 回答 1

3
data.frame(id = sam[,1], y = dat[cbind(sam[,1],(1+sam[,2]))])
于 2012-05-12T13:37:23.030 回答