根据列号选择值

时间:2012-05-12 13:27:03

标签: r dataframe matching

有一个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

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

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

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

datsam的结构。

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")

1 个答案:

答案 0 :(得分:3)

data.frame(id = sam[,1], y = dat[cbind(sam[,1],(1+sam[,2]))])