匹配R中的表并从行返回值

时间:2015-07-06 19:45:51

标签: r matching

我有一列数据,state_key以及存储在distance_key中的相关信息我想扫描state_key以查找与state_m匹配的内容,当有匹配时我希望它在distance_key

中返回

像这样:

   state_key distance_key state_m distance_key 
1    CA       100            NC        120
2    NC       120            OH        160
3    MA       130
4    OH       160

当你使用match()时,它会告诉我是否有一个,但我还需要更多。

3 个答案:

答案 0 :(得分:1)

你可以尝试:

mydf[ mydf$state_key %in% state_m,]

答案 1 :(得分:0)

如果要返回与state_m中的条目及其对应的distance_key匹配的所有行的数据框,请尝试以下操作:

df[df$state_key %in% state_m, cbind("state_key" , "distance_key")]

如果您只想在向量中使用相应的distance_key值,则可以更简洁地返回:

df[df$state_key %in% state_m, "distance_key"]

如果state_m是单个值而不是值向量,则使用:

df[df$state_key == state_m, "distance_key"]

答案 2 :(得分:0)

使用更快,更高效的软件包 - data.table:

install.packages("data.table")
library(data.table)

在数据表中存储您要查找的状态列表

list.states <- as.data.table(state_m)
setnames(list.states,1,"STATE_CODE") # give some name to your column eg: STATE_CODE
setkey(list.states,STATE_CODE) # merging would be done on STATE_CODE

状态代码和距离的整个数据集应存储为数据表

dt.state.key <- as.data.table(state_key) 
setnames(dt.state.key,1,"STATE_CODE") # same column name as in the list to be matched
setkey(dt.state.key,STATE_CODE) # merging would be done on this column

result <- merge(list.states,dt.state.key,all=F) # inner join (all=F) gives the match