与data.frame相比,grep和dplyr tbl出现意外行为

时间:2016-03-22 18:46:46

标签: regex r dataframe dplyr grepl

考虑这个例子

library(dplyr)

simple_dat_df <- data.frame(num = 1:5, let = letters[1:5], stringsAsFactors = FALSE)

grepl("[a-z]", simple_dat_df$let)
grepl("[a-z]", simple_dat_df[,"let"])

simple_dat_tbl <- data_frame(num = 1:5, let = letters[1:5])

grepl("[a-z]", simple_dat_tbl$let)
grepl("[a-z]", simple_dat_tbl[,"let"])

前三个grepl命令返回[1] TRUE TRUE TRUE TRUE TRUE。最后一个只有[1] TRUE

我希望它是一样的。意图是什么?最后一个语句怎么能返回一个向量?

1 个答案:

答案 0 :(得分:1)

这是dplyr的一项功能。如果将data_frame子集化以获得一列,则不会简化向量的输出,这是data.frame的标准行为。参见:

class(simple_dat_tbl$let)
[1] "character"
class(simple_dat_tbl[,"let"])
[1] "tbl_df"     "data.frame"

如果您希望它返回矢量,则可以使用[[]]。见:

class(simple_dat_tbl[["let"]])
[1] "character"

有关详细信息,请参阅this vignette