索引行的子集在R中不起作用?

时间:2017-07-09 02:44:05

标签: r

我已经完成了数千次,但我知道我在这里遗漏了一些东西。我想通过在另一个中匹配的列对我拥有的数据框进行子集化。但是,标准流程似乎不起作用。这就是我所拥有的:

a <- as.character(df1$col1)
b <- names(df2)
df2[(b %in% a), ]

现在最后一行似乎没有做任何事情。没有错误,但b %in% a位肯定不会返回所有TRUE

a[1:10]
"2.5D"             "2D"               "2DFighter"        "3DPlatformer"    "3DVision"         "4PlayerLocal"     "4X"               "Abstract"        "Action"           "Action-Adventure"

b[1:10]
"appid"            "2.5D"             "2D"               "4PlayerLocal"    "6DOF"             "Action"           "Action-Adventure" "ActionRPG"       "Adventure"        "Anime" 

b[1:10] %in% a[1:10]
FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE FALSE FALSE

names(df2[(b %in% a), ])
"appid"            "2.5D"             "2D"               "4PlayerLocal"    "6DOF"             "Action"           "Action-Adventure" "ActionRPG"       "Adventure"        "Anime" 

我想要的是df2是df1中匹配列的子集。我想说这是正确的方法,因为我甚至有两个与%in%匹配的向量都是相同的字符格式。然而,柱状子集似乎没有做任何事情。

对于我在这里做错了什么,有什么显而易见的吗?

1 个答案:

答案 0 :(得分:2)

这里重要的是,使用df[a,b]a子集行和b子集列进行子集化时。

这(@Kevin在评论中提到):

df2[(b %in% a), ]

将数据帧中的某些行进行子集化,这意味着所有列仍然存在。换句话说,我们需要:

df2[ ,(b %in% a) ]