我有一个数据帧A,我希望它的列与另一个数据帧B的row.names相匹配。
# 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中所有位置的列表。
#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
...请注意,我希望找到所有可能的解决方案。
我知道这应该是match或which的一些变体,因为给定了in this example,但我不确定如何对每个匹配进行分解。我看到的方式是逐行通过for循环运行它,但也许有更好的方法来做到这一点?
发布于 2020-12-06 18:56:56
您可以根据职位的名称创建一个职位列表,并在dataframe A中从职位列表中随机分配一个值。
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 9data
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")https://stackoverflow.com/questions/65166979
复制相似问题