首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找R中DF的向量匹配列中位置的所有索引

查找R中DF的向量匹配列中位置的所有索引
EN

Stack Overflow用户
提问于 2020-12-06 18:29:11
回答 1查看 50关注 0票数 0

我有一个数据帧A,我希望它的列与另一个数据帧B的row.names相匹配。

代码语言:javascript
复制
# A
v1    v2    
X1    X3
X1    X5
X1    X15
X2    X3
X2    X4
...


# row.names of B (some values are duplicated)
row_names_B=c('X17', 'X1', 'X2', 'X15', 'X3', 'X3', 'X1', 'X5', 'X4', ...)

我希望将A的列与row_names_B的位置进行匹配,这样我就可以为A中的每一行返回B中所有位置的列表。

代码语言:javascript
复制
#my results:
v1_index    v2_index
2           5        #matches X1 in pos 2, X3 in pos 5
2           6        #matches X1 in pos 2, X3 in pos 6
7           5        #matches X1 in pos 7, X3 in pos 5
7           6        #matches X1 in pos 7, X3 in pos 6
2           5        #matches X1 in pos 2, X3 in pos 8
7           5        #matches X1 in pos 7, X3 in pos 8
...

请注意,我希望找到所有可能的解决方案。

我知道这应该是matchwhich的一些变体,因为给定了in this example,但我不确定如何对每个匹配进行分解。我看到的方式是逐行通过for循环运行它,但也许有更好的方法来做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2020-12-06 18:56:56

您可以根据职位的名称创建一个职位列表,并在dataframe A中从职位列表中随机分配一个值。

代码语言:javascript
复制
C <- A
ref <- split(seq_along(row_names_B), row_names_B)
C[] <- lapply(A, function(y) sapply(ref[y], 
                    function(x) if(length(x) == 1) x else sample(x, 1)))
C

#  v1 v2
#1  2  5
#2  2  8
#3  7  4
#4  3  5
#5  3  9

data

代码语言:javascript
复制
A <- structure(list(v1 = c("X1", "X1", "X1", "X2", "X2"), v2 = c("X3", 
"X5", "X15", "X3", "X4")), class = "data.frame", row.names = c(NA, -5L))
row_names_B <- c("X17", "X1", "X2", "X15", "X3", "X3", "X1", "X5", "X4")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65166979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档