嗨,我有一个非常棘手的问题。 我尝试了几种方法,到目前为止我迷路了。
我有一个包含一列的表,其中包含9和2。
这是第二张表:
> my_crazy_data
V1 V2 V3 V4 V5 V6 V7
1 1 a 2.0 3.0 4.0 9.0 6.0
2 1 b 0.2 0.1 0.8 0.9 0.2
3 1 c 0.1 0.3 0.4 0.1 0.8
4 1 d 0.1 0.1 0.3 0.1 0.4
5 2 a 1.0 2.0 3.0 4.0 5.0
6 2 b 0.1 0.4 0.3 0.5 0.7
7 2 c 0.1 0.4 0.2 0.5 0.8
8 2 d 0.2 0.5 0.6 0.7 0.9
9 3 a 8.0 2.0 3.0 4.0 5.0
10 3 b 0.1 0.4 0.3 0.5 0.7
11 3 c 0.1 0.4 0.2 0.5 0.8
12 3 d 0.2 0.5 0.6 0.7 0.9
现在我想从第一个表中获取第一个元素(在本例中为9)并在第一行V3-V7中找到它,因为V1是索引。一旦我找到了9(在这种情况下是V6),我想用V1和V2返回索引V1 = 1的所有V6,结果看起来像:
1 a 9.0
1 b 0.9
1 c 0.1
1 d 0.1
然后继续从table1的第二个元素(在这种情况下为2)和相同的过程,但只在第一行中搜索第一个V1 = 2,所以我会在第5行搜索2,一旦我找到它 只输出索引V1 = 2的列,结果如下:
2 a 2.0
2 b 0.4
2 c 0.4
2 d 0.5
我该怎么做?请帮忙 - 任何方法都可以。
谢谢你xx
答案 0 :(得分:1)
以下是解决问题的一种方法:
d <- read.table(text=' V1 V2 V3 V4 V5 V6 V7
1 1 a 2.0 3.0 4.0 9.0 6.0
2 1 b 0.2 0.1 0.8 0.9 0.2
3 1 c 0.1 0.3 0.4 0.1 0.8
4 1 d 0.1 0.1 0.3 0.1 0.4
5 2 a 1.0 2.0 3.0 4.0 5.0
6 2 b 0.1 0.4 0.3 0.5 0.7
7 2 c 0.1 0.4 0.2 0.5 0.8
8 2 d 0.2 0.5 0.6 0.7 0.9
9 3 a 8.0 2.0 3.0 4.0 5.0
10 3 b 0.1 0.4 0.3 0.5 0.7
11 3 c 0.1 0.4 0.2 0.5 0.8
12 3 d 0.2 0.5 0.6 0.7 0.9', header=TRUE)
# Your vector of values to look up
v <- c(9, 2, 4)
# Split the second table by V1
d.split <- split(d, d$V1)
do.call(rbind,
mapply(function(x, y) {
setNames(x[, c(1:2, 2 + match(y, x[1, -(1:2)]))],
c('V1', 'V2', 'val'))
}, d.split, v, SIMPLIFY=FALSE)
)
# V1 V2 val
# 1.1 1 a 9.0
# 1.2 1 b 0.9
# 1.3 1 c 0.1
# 1.4 1 d 0.1
# 2.5 2 a 2.0
# 2.6 2 b 0.4
# 2.7 2 c 0.4
# 2.8 2 d 0.5
# 3.9 3 a 4.0
# 3.10 3 b 0.5
# 3.11 3 c 0.5
# 3.12 3 d 0.7