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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在R中选择具有公共标记的所有列?相关的知识,希望对你有一定的参考价值。

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

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

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))]))

哪个回报:

            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 innames(DF)`。

以上是关于如何在R中选择具有公共标记的所有列?的主要内容,如果未能解决你的问题,请参考以下文章

R:如何计算列中用逗号分隔的所有字符值?

为数组中的所有 id 选择列上具有最大值的所有行

Laravel:如何在控制器的几种方法中重用代码片段

如何从片段中调用 getSupportFragmentManager()?

匹配或返回与 R 中指定列具有相同日期的列

R 具有两个因子变量的堆积百分比条形图 - 如何在图中标记百分比,而不计算 NA?