首页 文章

如何使用Dataframe列表列表

提问于
浏览
0

我不确定这是否可行,甚至不知道如何获得以下R问题的良好解决方案 .

数据/背景/结构:我收集了一个基于项目的合作数据的大数据集,它将特定项目映射到参与公司(这可以理解为社交网络分析的双边边缘列表) . 由于分析原因,建议将整个数据集子集化为不同位置和时间段的不同子集 . 因此,我创建了以下数据结构

sna.location.list 
[[1]]           (location1)
     [[1]]      (is a dataframe containing the bip. edge-list for time-period1)
     [[2]]      (is a dataframe containing the bip. edge-list for time-period2)
     ...
     [[20]]     (is a dataframe containing the bip. edge-list for time-period20)
[[2]]           (location2)
     ...         (same as 1)
 ...
[[32]]          (location32)
     ...

每个数据框都包含项目ID和相应的公司ID .

我的目标是将二分边缘列表转换为单模网络,然后进行一些与sna相关的计算(度,集中,状态,社区检测等)并保存它们 .

我知道如何使用一个(!)特定网络进行这些计算步骤,但它让我很难在所描述的列表结构中同时为所有网络自动执行此过程,并保存各种输出(节点级别)和网络级变量)在类似的结构中 .

我已经尝试查找for循环的几种方法并应用方法,但它仍然让我不眠之夜如何做到这一点,现在我感到很无助 . 任何帮助或建议将受到高度赞赏 . 如果您需要更多信息或示例给我一个简短的演示或代码示例如何处理这样的嵌套结构并以高效自动方式对所有上述子集进行与sna相关的计算/修改,请随时与我联系 .

1 回答

  • 1

    假设您有一个要应用于每个数据框的函数 foo . 那些数据框在列表中,所以 lapply(that_list, foo) 就是我们想要的 . 但是你有一堆列表,所以我们实际上想要在外部列表中首先 lapply ,因此 lapply(that_list, lapply, foo) . ( foo 将通过 ... 传递给内部 lapply . 如果您希望更明确,可以使用匿名函数: lapply(that_list, function(x) lapply(x, foo)) .

    您没有't given a reproducible example, so I' ll演示将 nrow 函数应用于内置数据框列表

    d = list(
      list(mtcars, iris),
      list(airquality, faithful)
    )
    
    result = lapply(d, lapply, nrow)
    result
    # [[1]]
    # [[1]][[1]]
    # [1] 32
    # 
    # [[1]][[2]]
    # [1] 150
    # 
    # 
    # [[2]]
    # [[2]][[1]]
    # [1] 153
    # 
    # [[2]][[2]]
    # [1] 272
    

    如您所见,输出结构为 list . 如果需要名称,可以使用 simplify = FALSE 切换到 sapply .

    这包括将函数应用于嵌套列表并将返回值保存在类似的数据结构中 . 如果您需要有关计算效率,并行化等方面的帮助,我建议使用可重现的示例来提出一个单独的问题 .

相关问题