R dplyr过滤列,列名以数字开头

时间:2017-12-29 17:06:24

标签: r dplyr

编辑:近乎重复的
How to reference column names that start with a number, in data.table
上述帖子data.table。问题类似但技术上依赖于包,但解决方案是相同的

开始原始帖子

我无法弄清楚如何使用dplyr::filter

过滤以下列
set.seed(1)
library(dplyr)
df <- as.data.frame(matrix(sample(c(TRUE, FALSE), 10, replace=TRUE), ncol=1)) %>%
        setNames(c(paste0("1", letters[1])))
      # 1a
# 1   TRUE
# 2   TRUE
# 3  FALSE
# 4  FALSE
# 5   TRUE
# 6  FALSE
# 7  FALSE
# 8  FALSE
# 9  FALSE
# 10  TRUE

df[df$"1a"==TRUE,]
# [1] TRUE TRUE TRUE TRUE

df %>% dplyr::filter("1a"==TRUE)
# [1] 1a
# <0 rows> (or 0-length row.names)

1 个答案:

答案 0 :(得分:1)

您可以使用反引号来引用具有非标准名称的变量。这适用于它们是否是数据框的列。

针对此特定情况

df %>% dplyr::filter(`1a`)  # note that == TRUE is never needed

或者一般来说,

`2b` = 1:5
mean(`2b`)
# [1] 3

当然,你不应该养成这样的坏习惯 - 尽可能使用标准名称。

正如评论中所述,?Quotes文档很有帮助。它声明(在名称和标识符部分中):

  

几乎总是,只要引用它们,就可以使用其他名称。首选引号是反引号(`),而deparse通常会使用它,但在许多情况下可以使用单引号或双引号(因为字符常量通常会转换为名称)。反引号可能必不可少的一个地方是在公式中分隔变量名称:请参阅formula