R按外部表

时间:2017-10-20 13:34:23

标签: r

鉴于以下数据

data_min <- data.frame("cond"=c("a","b","c"),"min"=c(1,3,1))
data <- data.frame("cond"=c("a","b","b","a","c"),"val"=c(0,2,4,7,0))

我想从data中选择所有行,因为val中的值大于data_min中为该条件指定的最小值。因此,在给定的示例中,我希望最终得到一个表

cond val
b    4
a    7

到目前为止,我已经尝试了

datanew <- data[which(data$cond==data_min$cond & data$val > data_min$min),]

给了我a 7但不是b 4。我有两个问题,(1)为什么我得到的结果,以及(2)我如何得到所需的结果?

3 个答案:

答案 0 :(得分:4)

您需要使用match,因为data.frames具有不同的行数:

data[data_min[match(data$cond, data_min$cond),]$min <= data$val,]

答案 1 :(得分:3)

您可以将两个数据框合并在一起,以简化操作:

> m=merge(data,data_min,by='cond')
> m[which(m$val > m$min), c('cond','val')]
  cond val
2    a   7
4    b   4

答案 2 :(得分:0)

使用dplyr的解决方案。我们可以先执行连接,然后在valmin列之间过滤条件。

library(dplyr)

data2 <- data %>%
  left_join(data_min, by = "cond") %>%
  filter(val > min) %>%
  select(-min)
data2
  cond val
1    b   4
2    a   7