julia dataframe - 按值列表对列进行子集化

julia dataframe - subsetting column by list of values

using DataFrames

df = DataFrame(A = 1:10, B = 2:2:20)

10x2 DataFrame
| Row | A  | B  |
|-----|----|----|
| 1   | 1  | 2  |
| 2   | 2  | 4  |
| 3   | 3  | 6  |
| 4   | 4  | 8  |
| 5   | 5  | 10 |
...
...

是否可以使用值列表对数据帧进行子集化,例如

df[df[:A] .in [3,4], :]

如果列表很小,可以通过

完成
df[(df[:A] .== 3) |  (df[:A] .== 4), :]

但我想知道是否有办法对大量值执行此操作

julia> df = DataFrame(x = 1:3:30, y = [2, 1, 2,1,3,4,5,3,3,3])
10x2 DataFrames.DataFrame
| Row | x  | y |
|-----|----|---|
| 1   | 1  | 2 |
| 2   | 4  | 1 |
| 3   | 7  | 2 |
| 4   | 10 | 1 |
| 5   | 13 | 3 |
| 6   | 16 | 4 |
| 7   | 19 | 5 |
| 8   | 22 | 3 |
| 9   | 25 | 3 |
| 10  | 28 | 3 |

julia> df[findin(df[:y],[1,3]),:]
6x2 DataFrames.DataFrame
| Row | x  | y |
|-----|----|---|
| 1   | 4  | 1 |
| 2   | 10 | 1 |
| 3   | 13 | 3 |
| 4   | 22 | 3 |
| 5   | 25 | 3 |
| 6   | 28 | 3 |

上面接受的答案不再有效。 所以这是 2019 年的工作:

# by column name

julia> df[ [x in [3,4] for x in df[:A]] ,:]
2×2 DataFrame
│ Row │ A     │ B     │
│     │ Int64 │ Int64 │
├─────┼───────┼───────┤
│ 1   │ 3     │ 6     │
│ 2   │ 4     │ 8     │

# or by column number

julia> df[ [x in [3,4] for x in df[:1]] ,:]
2×2 DataFrame
│ Row │ A     │ B     │
│     │ Int64 │ Int64 │
├─────┼───────┼───────┤
│ 1   │ 3     │ 6     │
│ 2   │ 4     │ 8     │