按索引行进行子集化在 R 中不起作用?

  • 本文关键字:不起作用 索引 子集 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%都是相同的字符格式。然而,列式子集似乎没有做任何事情。

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

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

这(正如@Kevin在评论中提到的(:

df2[(b %in% a), ]

是数据框外的某些行的子集,这意味着所有列仍然存在。要对列进行子集化,我们需要:

df2[ ,(b %in% a) ]

最新更新