我已经完成了数千次,但我知道我在这里遗漏了一些东西。我想通过在另一个中匹配的列对我拥有的数据框进行子集化。但是,标准流程似乎不起作用。这就是我所拥有的:
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%
匹配的向量都是相同的字符格式。然而,柱状子集似乎没有做任何事情。
对于我在这里做错了什么,有什么显而易见的吗?
答案 0 :(得分:2)
这里重要的是,使用df[a,b]
,a
子集行和b
子集列进行子集化时。
这(@Kevin在评论中提到):
df2[(b %in% a), ]
将数据帧中的某些行进行子集化,这意味着所有列仍然存在。换句话说,我们需要:
df2[ ,(b %in% a) ]