如何将r中的交集函数自动化



我有一个任务,我必须在其中找到;交叉度";在包含多个国家的Spotify排行榜前50名的各种数据帧中。为了做到这一点,使用下面的代码将该数据的向量1乘1进行交叉,并转换数据帧中每个国家的交叉点的总和。虽然这已经奏效了,但我要求优化代码,以便从中进行网络分析,所以我的问题是:有什么功能可以减少下面的代码吗?提前感谢,这是我第一次进入这个论坛:(

以下代码就是一个示例。我已经为列表中的每个国家做了相同的代码,现在我必须再添加12个,所以我真的需要优化代码。

I_arg_cl <- length(intersect(top50_cl$track.uri, top50_arg$track.uri))/50 
I_arg_pe <- length(intersect(top50_pe$track.uri, top50_arg$track.uri))/50 
I_arg_br <- length(intersect(top50_br$track.uri, top50_arg$track.uri))/50
I_arg_bo <- length(intersect(top50_bo$track.uri, top50_arg$track.uri))/50
I_arg_ec <- length(intersect(top50_ec$track.uri, top50_arg$track.uri))/50
I_arg_co <- length(intersect(top50_co$track.uri, top50_arg$track.uri))/50
I_arg_uy <- length(intersect(top50_uy$track.uri, top50_arg$track.uri))/50
I_arg_py <- length(intersect(top50_py$track.uri, top50_arg$track.uri))/50
I_arg_ve <- length(intersect(top50_ve$track.uri, top50_arg$track.uri))/50

问候!

要在有大量数据帧时自动执行这些任务,请将它们放在列表中,并使用lapply应用该函数。ls(pattern = 'top50_')将返回全局环境中包含'top50_'的对象的名称。使用setdiff,我们从中删除top50_arg值。

data_vec <- setdiff(ls(pattern = 'top50_'), 'top50_arg')
result <- sapply(mget(data_vec), function(x) 
length(intersect(x$track.uri, top50_arg$track.uri)))/50

最新更新