在R

时间:2017-02-05 01:12:36

标签: r search indexing dataframe

如何根据多个条件搜索data.frame?例如,我有data.frame列,例如DateTimeItemValue,然后我想搜索{{1}我有data.frameDate = 1/2/2010Time = 5pmItem = Car的地方,是否有允许我这样做的功能?更重要的是,如何获取具有这些值的数据帧的行索引?

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

2 个答案:

答案 0 :(得分:3)

听起来您对执行查询有疑问。如果您熟悉dplyr包,则会发现select等可以提供帮助的功能。但是,您应该只使用basestats软件包即可完成所需的操作。

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

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

然后你准备好分组

data_subset <- data[indices, ]

我希望上面的假设示例可以帮助您找到所需的答案。

答案 1 :(得分: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。