如何自动化 r 中的交集功能?

How to automatize intersect function in r?

我有一个任务,我必须在包含多个国家/地区前 50 名 Spotify 图表的各种数据框中找到“交叉度”。为了做到这一点,我使用下面的代码将这个数据的向量 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_') 将 return 全局环境中包含 '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