【问题标题】:Looking up values in R在 R 中查找值
【发布时间】:2011-05-07 07:30:28
【问题描述】:

我在 R 中有以下数据集:

> closed
 [1] 57637 31508 54113  2348  4747 68284 61779 36654 31399 54126 11232 60659 42968 56388  5114 66289 69491 45668   879 65649 71172 36120 61802  7699 70982
[26] 65720

> length(closed)
[1] 26

> stlist[1:5,]
          M.Type      M.Code                 M.Name    B.Code               B.Name          B.Region
1             5M        1759            Istanbul 5M    110007               Taksim               Ist
2             5M       62461              Edirne 5M    110007            Aysekadin               Ist
3             5M       69493            Tekirdag 5M    110431             Tekirdag               Ist
4             5M        7516              Ankara 5M    110548             Batikent               Ank
5             5M       14148               Bursa 5M    110351                Bursa               Ist

> nrow(stlist)
[1] 1830

我想在“stlist$M.Code”中查找“close”的所有值并创建一个新的数据框,该数据框仅包含具有 26 个“M.Code”的行以及“stlist”的所有 6 列.我该怎么做?

【问题讨论】:

    标签: r list dataset lookup


    【解决方案1】:

    使用 %in% :

    stlist <- data.frame(
        M.Code = letters[1:10],
        b = rnorm(10)
    )
    closed <- c("a","d","f")
    
    stlist[stlist$M.Code %in% closed,]
    

    【讨论】:

      【解决方案2】:

      Joris 答案的替代方法是使用subset()

      subset(stlist, subset = M.Code %in% closed)
      

      我知道两者之间的唯一主要区别是 subset() 假定条件中引用的变量是数据框的一部分,如果具有该名称的变量存在于数据框。在这个例子中这没什么大不了的(只是一个额外的'stlist$'),但如果你有复杂的标准,它可以节省一些输入。

      也许其他人知道更细微的区别。

      【讨论】:

      • 使用 subset 会因为额外的开销而稍微慢一些。
      • 正如约书亚所说。我主要使用索引来提高性能,但我不得不承认,subset 是一种更易读且不易出错的解决方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-30
      • 1970-01-01
      • 2014-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多