R 在另一个表中比较一个表中的一个元素并返回列

R 在另一个表中比较一个表中的一个元素并返回列,r,R,嗨,我有一个很棘手的问题。 我尝试了几种方法,但到目前为止我迷路了 我有一个表,一列包含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

嗨,我有一个很棘手的问题。 我尝试了几种方法,但到目前为止我迷路了

我有一个表,一列包含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=1的所有V6以及V1和V2,因此结果如下所示:

1 a 9.0
1 b 0.9
1 c 0.1 
1 d 0.1 
2 a 2.0
2 b 0.4
2 c 0.4
2 d 0.5 
然后继续表1中的第二个元素(在本例中为2)和相同的过程,但只搜索第一个V1=2的第一行,因此我将在第5行中搜索2,一旦找到它 仅输出索引V1=2的列,因此结果如下所示:

1 a 9.0
1 b 0.9
1 c 0.1 
1 d 0.1 
2 a 2.0
2 b 0.4
2 c 0.4
2 d 0.5 
我该怎么做?请帮助-任何方法都可以


谢谢你,这里有一个方法:

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

d谢谢你,但是:
[.data.frame
中有错误(x,c(1:2,2+匹配(y,x[1,-(1:2)])):未定义的列被选中可能是我的向量v吗?它有更多的值(270)比我的table2行我认为它不是代码片段-我认为它是我的表。table2不是一个“传统”表。它是在table2中读取的。如果它在第二个表中找不到元素,我如何返回0?如果我找到了。调用(rbind,mapply(function(x,y){setNames(x[,c(1:2,2+match)(y,x[1,-(1:2)],nomatch=NA_integer,uncomparables=NULL)),c('V1','V2','val'))},d.split,v,SIMPLIFY=FALSE))它仍然说:选择了错误未定义的列-我缺少一些小细节,请帮助?