【问题标题】:Searching a Data Frame in R在 R 中搜索数据框
【发布时间】:2017-02-05 01:12:36
【问题描述】:

如何根据多个条件搜索data.frame?例如,我有一个data.frame,其中包含DateTimeItemValue 等列,然后我想搜索data.frame,其中有Date = 1/2/2010Time = 5pmItem = CarValue = 5,有没有允许我这样做的功能?更重要的是,如何获取具有这些值的数据框的行索引?

例如,假设所有这些值都在数据框的第三行,是否有一个函数会逐行搜索数据框,然后输出索引为 3?

【问题讨论】:

    标签: r search indexing dataframe


    【解决方案1】:

    听起来您对执行查询有疑问。如果您熟悉dplyr 包,您会发现诸如select 之类的函数可以提供帮助。但是,您应该能够通过使用 basestats 包来完成您所需要的。

    例如,给定一个数据框,您应该提取符合您的条件的行索引。您可以使用which 函数来完成此操作:

    indices <- which(data$Date == "1/2/2010" & data$Time == "5pm" & data$Item =="Car" & data$Value == 5)
    

    然后你就可以进行子集化了

    data_subset <- data[indices, ]
    

    我希望以上假设的例子能帮助你得到你需要的答案。

    【讨论】:

      【解决方案2】:

      您可以使用“which”作为以下代码:

      df <- data.frame(cbind(Date = '1/2/2010', Time = '5pm', Item = 'Car', Value = 50000))
      new <- data.frame(cbind(Date = '1/3/2010', Time = '6am', Item = 'keys', Value = 100))
      df <- rbind(df, new)
      
      searchIndex1 <- function(dd, tt, itm, val){
      which(df$Date==dd & df$Time== tt & df$Item ==itm & df$Value == val)
      }
      searchIndex1(dd='1/3/2010', tt='6am', itm='keys', val=100)
      

      它将返回索引号 2。

      或者你可以使用“过滤器”:

      searchIndex2 <- function(dd, tt, itm, val){
        df.with.index <- mutate(df, IDX = 1:n())
        result <- filter(df.with.index,(Date==dd & Time== tt & Item ==itm & Value == val))$IDX
      }
      
      searchIndex2(dd='1/2/2010', tt='5pm', itm='Car', val=50000)
      

      它将返回索引 1。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-31
        • 1970-01-01
        • 2017-07-27
        • 1970-01-01
        • 2014-07-05
        相关资源
        最近更新 更多