tidyverse在给定一系列键的情况下在数据框中查找值的方法

时间:2018-07-11 13:38:04

标签: r dataframe tidyverse

假设我有如下数据框

df=data.frame(x=1:5,y=c("a","b","c","d","e"))

其中y是关键列。有时我想查询x中与一系列键相对应的y的值。为此,我可以

row.names(df)=df$y
df[c("b","d","c"),c("x")]

我会得到

[1] 2 4 3

请注意,返回值的顺序与一系列给定键的顺序相同。

现在,我想使用tidyverse的小标题来实现相同的目的。但是由于tibble没有row.names,因此我不知道该怎么做。

我的问题是,按照键的顺序,给定一系列键的小标题中查找值的“最聪明”方式(或惯用的方式,是从Python借用术语)?

2 个答案:

答案 0 :(得分:1)

使用data.frame完成此操作的非行名方法是

df[match(c('b', 'd', 'c'), df$y), 'x']

这也适用于小标题。或者,使用dplyr动词:

df %>% slice(match(c('b', 'd', 'c'), y)) %>% pull(x)

答案 1 :(得分:1)

我会使用过滤器

library(tidyverse)

df <- tibble(
  x = 1:5,
  y = c("a","b","c","d","e")
)

df %>% 
  filter(y %in% c("b","d","c"))
#> # A tibble: 3 x 2
#>       x y    
#>   <int> <chr>
#> 1     2 b    
#> 2     3 c    
#> 3     4 d

reprex package(v0.2.0.9000)于2018-07-12创建。