按列表过滤数据框中的列

AJK*_*AJK 3 r subset

我想从现有的数据框中生成一个新的数据框,其中根据该变量是否在单独的向量中列出(即作为行)来选择该新 df 中的列。因此,新的 df 将仅包含向量中列出的那些列。为了提高效率,我想这样做而不必手动指示这些列。

我的直觉是,这是一个非常简单的操作,但对于 R 来说,我不太确定如何解决这个问题。

sco*_*tus 5

我今天刚用过这个(以及在另一个答案中)。

如果你想创建一个串联列表:

matchingList <- c("a", "b", "b")
Run Code Online (Sandbox Code Playgroud)

df并且您有一个具有一些相同列名的数据框,那么您可以像这样对它进行子集化:

newDF <- df[, which((names(df) %in% matchingList)==TRUE)]
Run Code Online (Sandbox Code Playgroud)

如果您从左到右阅读英文版并附有说明,则代码显示:

  • 创建一个名为的新数据框newDF
  • 将 newDF 设置为等于数据框所有行的子集<-df[,(行位于逗号之前和括号之后的空间中)
  • 其中 df 中的列名称which((names(df)
  • 与列出的匹配名称进行比较时%in% matchingList)
  • 返回 true 值==TRUE)

它仅对两个列表中都存在的字段进行子集化,并返回逻辑值 TRUE 以满足比较两个列表的which 语句。

还有更简单的方法,但这种方法允许您广泛更改 df 和匹配列表,而不必重新设置过滤器。