我想知道是否可以根据其中一列的值(例如id)对一个数据框进行子集化,是否可以像df2一样使用equals运算符,但是,如果要基于像ids这样的列表,我找不到基于列表的数据集子集的运算符,因为.in运算符似乎不适用于数据帧,是否可以使用其他运算符?
df = DataFrame(ids = [1, 1000, 10000, 100000,1,2,3,4], B = [1,2,3,4,123,6,2,7], D = ["N", "M", "I", "J","hi","CE", "M", "S"])
df2= df[df[:pmid] .== 1000, :]
ids = [2,3, 10000]
df3= df[df[:pmid] .in ids,:]
截至目前,df3给了我一个边界错误。
我也在Julia 0.6.4上运行它
答案 0 :(得分:2)
我想第一行ids=
中的错字应该是pmid=
,因为您稍后将使用该名称进行过滤。
对于df3,正确的语法应该是(我在1.0.2上尝试过):
df3= df[in.(df[:pmid], [ids]),:]
note在[]
周围添加了ids
,因为它应该是向量的向量。
我想将您指向DataFramesMeta.jl软件包,该软件包提供了更清晰的语法:
using DataFramesMeta
@where df (in.(:pmid, [ids]))
关于discourse.julialang.org的讨论也很有趣 关于按列表过滤的语法,包括性能提示。