r - 用 R 在几个向量中找到共同的元素并应用一个函数

标签 r

我是 R 新手,我想提出一个问题,虽然标题与其他发布的问题相似,但我没有在其中找到解决方案。

我的问题如下:我有几个不同长度的向量,我想以成对的方式比较它们,并对每个比较应用一个函数,以生成向量之间共同元素的值,例如名为 A、B 的 4 个向量, C, D 我想找出 A 和 B、A 和 C、A 和 D、B 和 C、B 和 D、C 和 D 之间的共同元素。

这里有一个更详细的例子(只有两个向量):

A=c("t","qt","er","oa","qra")
B=c("t","ea","ew","ee","oa","qwt") 
length(which(A%in%B))/min(length(A),length(B)) #this is the function I would like to apply to each comparison.
0.4 #value returned for the function

我有大量向量,但我不知道如何实现 for 循环以进行成对比较。

提前谢谢了

最佳答案

您可以使用 outer

baseSet <- c('t','qt','er','oa','qra','ea','ew','ee','qwt')
set.seed(0)
A <- sample(baseSet, 5)
B <- sample(baseSet, 5)
C <- sample(baseSet, 5)
D <- sample(baseSet, 5)
dFun <- function(x,y){length(which(x%in%y))/min(length(x),length(y))}

outer(list(A,B,C,D), list(A,B,C,D),Vectorize(dFun))
#     [,1] [,2] [,3] [,4]
#[1,]  1.0  0.6  0.2  0.6
#[2,]  0.6  1.0  0.4  0.6
#[3,]  0.2  0.4  1.0  0.4
#[4,]  0.6  0.6  0.4  1.0

编辑:
list.df <- list(A=A, B=B, C=C, D=D)
outer(list.df, list.df, Vectorize(dFun))
#    A   B   C   D
#A 1.0 0.6 0.2 0.6
#B 0.6 1.0 0.4 0.6
#C 0.2 0.4 1.0 0.4
#D 0.6 0.6 0.4 1.0

关于r - 用 R 在几个向量中找到共同的元素并应用一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16538598/

相关文章:

r - 插入符::varImp for GLM model worked before and gives me an error

RNetlogo 和 NetLogo 5.3 错误

linux - 在 AWS Red Hat Linux 上安装插入符号时出错

r - fread segfault 具有 30GB 空间分隔的文件,其中一些行以空格开头

r - 使用 igraph 查找距离矩阵

r - 多变量 tidyr 旋转

r - R中使用dplyr基于单一条件过滤组

r - 应用 CSS 使 ioslides 样式的代码更小

r - 让 R 将 "41520092010"识别为 "04/15/2009 20:10"的最有效方法

json - 如何将json文件转换为R中的数据帧?