【问题标题】:Matching numeric values in a dataframe匹配数据框中的数值
【发布时间】:2019-03-21 19:19:57
【问题描述】:
a <- c(4000,3500,3000)
b <- c(0.43,0.55,0.61)

test.data <- data.frame(a,b)

假设我想通过引用 3500 而不是按行/列获得值 0.55。我将如何实现这一目标?我想我可以将a 转换为字符串,然后以这种方式引用它,但是有没有办法引用数值来提取b 中的值?

编辑:感谢大家的精彩回复!

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    如果我理解得很好,你可以得到如下:

    test.data$b[test.data$a == 3500]
    [1] 0.55
    

    我还想在您开始您的 R 之旅时向您介绍dplyr

    library(dplyr)
    test.data %>%
      filter(a == 3500) %>%
      pull(b)
    [1] 0.55
    

    【讨论】:

      【解决方案2】:

      使用data.table-

      > setDT(test.data)[a==3500,b]
      [1] 0.55
      

      > setDT(test.data)[a==3500]$b
      [1] 0.55
      

      注意 - 首先,选项是首选,如评论中提到的@Frank。

      【讨论】:

      • 首选第一个习惯用法,因为它不会为所有列创建数据的子集,而只是需要的那个。此外,它还会检查列名的完全匹配。
      • @Frank 我同意。但是,我给了他更多的选择。
      • 当您提供选项时,很高兴谈论差异以及为什么一个人可能更喜欢另一个。
      【解决方案3】:

      更多选项。

      test.data[, "b"][test.data$a == 3500]
      # [1] 0.55
      
      test.data[test.data$a == 3500, "b"]
      # [1] 0.55
      

      【讨论】:

      • 另一个:with(test.data, b[a == 3500])
      猜你喜欢
      • 1970-01-01
      • 2018-09-15
      • 1970-01-01
      • 1970-01-01
      • 2019-12-05
      • 1970-01-01
      • 1970-01-01
      • 2020-07-30
      • 2019-03-23
      相关资源
      最近更新 更多