代码之家  ›  专栏  ›  技术社区  ›  deca

R如何处理不明确的列名?

r
  •  0
  • deca  · 技术社区  · 6 年前

    最近,我遇到了一个奇怪的R行为,我想更好地理解。

    让我们假设以下两个例子:

    Example 1:
    
    ebit.2018_base <- c(1,2,3,5,7,3,2)
    ebit.2017_base <- c(1,2,3,5,7,3,2)
    ebit <- data.frame(ebit.2018_base, ebit.2017_base)
    
    ebit$test <- ebit$ebit.2018 * 5
    

    r可以用这个列名计算,即使它不完全匹配。

    Example 2
    
    ebit.2018_base <- c(1,2,3,5,7,3,2)
    ebit.2018_notbase <- c(1,2,3,5,7,3,2)
    ebit.2017_base <- c(1,2,3,5,7,3,2)
    ebit <- data.frame(ebit.2018_base, ebit.2018_notbase, ebit.2017_base)
    
    ebit$test <- ebit$ebit.2018 * 5
    

    这不起作用。

    我的假设是: 在第一个示例中,R可以清楚地理解我所指的列 ebit.2018_base 用这个词 ebit.2018 . 在第二个示例中,它是不明确的,因为有两列以开头 EBIT2018 .

    这是正确的吗?抱歉,如果这是常识,或者之前已经解决过,我只是想确保我正确理解背后的逻辑。

    1 回复  |  直到 6 年前
        1
  •  2
  •   nicola    6 年前

    是的,你是对的!

    从摘录文档(您可以通过以下方式访问: ?"$" ?Extract ):

    [和$都选择列表中的单个元素。主要区别 美元不允许计算索引,而[[允许。名字是 相当于x[“名称”,精确=假]]。另外,部分匹配 [的行为可以通过精确的参数来控制。

    因为$允许部分匹配,所以您的第一个案例有效。但在第二种情况下,它不能解决单个列,因此认为您请求的是一个不存在的列;因此是错误。