【问题标题】:Rpy2 - List of List of DataframesRpy2 - 数据框列表列表
【发布时间】:2013-01-15 01:04:18
【问题描述】:

我正在尝试弄清楚如何使用 python 将文件从 XML 文件解析为数据结构以传递给 R。

我需要在 R 中创建一个数据框列表:

Nodes = data.frame()
Edges = data.frame()

NetworkCompListA = list()
NetworkCompListA[['Nodes']] = Nodes
NetworkCompListA[['Edges']] = Edges

Networks = list()
Networks[['NetA']] = NetworkCompListA
Networks[['NetB']] = NetworkCompListB

我知道如何根据 Rpy2 文档中的示例创建数据框。

import rpy2.rlike.container as rlc
od = rlc.OrdDict([('value', robjects.IntVector((1,2,3))),
                      ('letter', robjects.StrVector(('x', 'y', 'z')))])
df = robjects.DataFrame(od)

如何将 'df' 插入到列表中,然后将该列表插入到 python 中的另一个列表中,然后将其写入 rdata 文件以加载到另一个 R 实例中?

谢谢!

【问题讨论】:

    标签: r python-2.7 rpy2


    【解决方案1】:

    ListVector 类需要实现iteritems() 的对象(例如dictOrderedDict)。请注意,在 R 中,data.frames 只是具有(松散)约束的列表,即所有元素都应该是相同长度的向量(或者可以接受具有匹配行数的矩阵),并且具有行名和列名(列表的名称是列名)。

    from rpy2.robjects.vectors import ListVector, DataFrame
    
    # rpy2's OrdDict was added because there was no ordered dict
    # in Python's stdlib. It should be gone by rpy2-2.5
    from collections import OrderedDict
    
    od = OrderedDict((('a', 1), ('b', 2)))
    df = DataFrame(od)
    
    od_l = OrderedDict((('df', df),))
    df_in_list = ListVector(od_l)
    df_in_list_in_list = ListVector(OrderedDict((('df_in_list', df_in_list),))
    

    【讨论】:

    • 谢谢 - 效果很好。最后一行只需要一个 ) 来平衡括号。是否有理由在 OrderedDicts 周围使用 (( )) 或者只是为了表明与 R 的 [[ 并行使用?
    • 除非我弄错了(SO的文本区域中没有paren-highlight模式),以下是括号。键、值:kv = ('df_in_list', df_in_list)。键值对列表:lkv = (kv,)。最终通话:OrderedDict(lkv)
    猜你喜欢
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 2013-06-10
    • 2020-09-13
    • 2017-10-04
    • 2017-07-09
    • 2015-07-31
    • 2018-02-05
    相关资源
    最近更新 更多