如何 select 在 R 中使用公共标签的所有列?

How to select in R all columns with a common tag?

我有一个包含数百列的 SparkDataFrame,我只想 select 那些上面有单词 "time" 的列。

而不是像这样必须手动写入列的所有名称:

df_selection <- SparkR::select(df, "TRT_time", "Flight_time", "SS_time", ...)

我想做这样的事情:

df_selection <- SparkR::select(df, like('^time.*?'))

在 SparkR 中有一个很好的方法吗? SQL like 运算符的等价物?我是 R 的初学者,很抱歉,如果这是一个非常简单的问题,但我无法理解它。

谢谢!

您可以使用 names() 访问列名,即使它是 SparkDataFrame。然后您可以使用 grepl() 来查找与模式匹配的内容。

cols <- names(df)

head(select(df, cols[grepl('^time.*?', names(df))]))

哪个returns:

            time_hour
1 2013-01-01 06:00:00
2 2013-01-01 06:00:00
3 2013-01-01 06:00:00
4 2013-01-01 06:00:00
5 2013-01-01 07:00:00
6 2013-01-01 06:00:00

评论后更新:

最好的办法是将它包含在 OR 中,即 '|',您可以在其中子集 col

head(SparkR::select(df, cols[grepl('^time.*?', names(df)) | cols == "airline_iata"]))

注意:您也可以像这样创建字符向量 c(cols[grepl('^time.*?', names(df))], 'airline_iata'),但如果未找到列名,Spark 会抛出错误。 airline_iata'is not in名称(df)`.