【问题标题】:How to use space separated variable name in as.factor() to access data of a dataframe?如何在 as.factor() 中使用空格分隔的变量名来访问数据框的数据?
【发布时间】:2021-04-04 12:12:56
【问题描述】:

问题是什么时候出现的?

我试图使用以下语句使用R(通过rpy2)的polr() 方法进行序数回归分析。在该声明中,“步数”是我的因变量。当我设置(在列标题和语句中)下划线替换空格(即 Number_of_Steps)时,一切正常。

model = mass.polr('as.factor(Number of Steps) ~ Var2',
                  data=df_data, method='logistic',
                  Hess = True)
# Here, mass = importr('MASS')

但是,如果使用空格(即步数),我会收到以下错误。

RRuntimeError:解析错误(文本 = x,keep.source = FALSE):
:1:17: 意外符号 1: as.factor(Number of

我是如何尝试解决问题的?

我在 google 上进行了搜索,还检查了与此问题相关的 SO(例如 this one)中的不同问题。但是,我仍然没有找到这个问题的解决方案。

那么,我的问题

在使用mass.polr() 期间如何在as.factor(variable name) 中使用空格分隔的变量名(即列标题)?

感谢阅读!

【问题讨论】:

    标签: r dataframe rpy2 unexpected-token mass


    【解决方案1】:

    这不是 rpy2 特有的。在 R 中,可以使用反引号 ( ` ) 来分隔包含空格的符号。

    假设您的示例在其他方面是正确的,则应执行以下操作:

    model = mass.polr('as.factor(`Number of Steps`) ~ Var2',
                      data=df_data, method='logistic',
                      Hess=True)
    

    演示:

    import rpy2.robjects as ro
    
    # Get an R data frame with a column name that has
    # a space.
    dataf = ro.r("""
    require("MASS")
    cbind(housing, "My Sat"=housing$Sat)
    """)
    
    print('column names:')
    print(tuple(dataf.colnames))
    
    from rpy2.robjects.packages import importr
    mass = importr('MASS')
    house_plr = mass.polr(
        ro.Formula('as.factor(`My Sat`) ~ Infl + Type + Cont'),
        data = dataf
    )
    

    【讨论】:

    • 感谢您的努力。但是在rpy2 中,我仍然收到错误RRuntimeError: Error in is.factor(x) : object 'Number of Steps' not found
    • 这是一个不同于问题出价的错误。它告诉您数据框中没有具有该名称的列。
    • 感谢您的回复。我知道只有在此列不可用时我才会收到此类错误。但是,尽管有该列(由 df['Number of Steps'] 检查),但在将 Number of Steps 保留在 `` (即 as.factor(Grave Accent symbol Number of Steps Grave Accent Symbol ))之后,我发现了这个错误。
    • 您没有提供完整的示例,但我怀疑您的数据框不是您希望的那样。我添加了一个独立的示例来表明这是有效的。
    • 非常感谢您的努力。但我很遗憾地告诉你,它在我的情况下不起作用。我尝试使用此语句pandas2ri.py2ri(df_data) 将 pandas 数据框转换为 R 的数据框。但是,我仍然遇到同样的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 2023-01-16
    相关资源
    最近更新 更多