如何根据两列查找值

时间:2014-07-29 04:21:47

标签: r

数据集是:

col_1,col_2,value
8521,13394,24
8521,14353,15
...
1112074,1112073,52

我希望在值列中查找前两列的数字。 我知道使用data.frame或数组可以解决这个问题。但col_1或col_2中的最大值是如此之大,以至于我无法构建1112074 * 3 data.frame。 如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

如果我理解正确,您需要在值列中查找给定前两列数字的数字

这里使用简单的data.frame和循环函数

的一种方式
dd<-data.frame(
   col_1 = c(8521, 8521, 1112074),
   col_2 = c(13394, 14353, 1112073),
   value = c(24,15,52)
)

getval<-function(c1,c2, data=dd) {
    data$value[data$col_1==c1 & data$col_2==c2]
}

getval(8521, 14353)
# [1] 15

不幸的是,这个程序并不快。如果您打算经常这样做,可以考虑使用data.table库,它允许您索引表格以便更快地查找

library(data.table)
dt<-data.table(
   col_1 = c(8521, 8521, 1112074),
   col_2 = c(13394, 14353, 1112073),
   value = c(24,15,52)
)
setkey(dt, col_1, col_2)

getval<-function(c1,c2, data=dt) {
    dt[.(c1,c2)][, value]
}
getval(8521, 14353)
# [1] 15