【问题标题】:How to automatize intersect function in r?如何在 r 中自动化相交函数?
【发布时间】:2021-08-09 06:40:43
【问题描述】:

我有一项任务,我必须在包含多个国家/地区的前 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

您好!

【问题讨论】:

    标签: r matrix vector intersect set-intersection


    【解决方案1】:

    要在您有大量数据框时自动执行此类任务,请将它们放在一个列表中并使用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-03
      • 1970-01-01
      • 2020-12-15
      • 2013-09-27
      • 2015-03-10
      • 2010-09-21
      • 1970-01-01
      相关资源
      最近更新 更多