如何在R中选择具有公共标记的所有列?

时间:2017-12-19 14:38:02

标签: r apache-spark-sql spark-dataframe sql-like sparkr

我有SparkDataFrame有数百列,我想只选择带有“时间”字样的列。

而不是做这样的事情必须手动编写列的所有名称:

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

我想做类似的事情:

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

在SparkR中有一种很好的方法吗? SQL like运算符的等价物?我在R中是一个彻头彻尾的唠叨,对不起,如果这是一个非常简单的问题,但我无法理解它。

谢谢!

1 个答案:

答案 0 :(得分:0)

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

cols <- names(df)

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

返回:

            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&#39; is not in名(DF)`