我已经这样做了数千次,但我知道我在这里错过了一些东西。我想通过与另一个数据框匹配的列来子集我拥有的数据框。但是,标准流程似乎不起作用。这是我所拥有的:
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%
都是相同的字符格式。然而,列式子集似乎没有做任何事情。
有什么显而易见的关于我在这里做错了什么吗?
这里重要的是,当使用df[a,b]
子集时,a
子集行,b
子集列。
这(正如@Kevin在评论中提到的(:
df2[(b %in% a), ]
是数据框外的某些行的子集,这意味着所有列仍然存在。要对列进行子集化,我们需要:
df2[ ,(b %in% a) ]