2017-12-19 8 views
0

私は数百の列でSparkDataFrameを持っています。私はそれに単語 "時間"を持つものだけを選択したいと思います。代わりに、手動で列のすべての名前を書くこと、このような何かをすることの共通のタグを持つすべての列をRで選択する方法は?

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

があります:

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

私のような何かをしたいと思いますSparkRでこれを行う良い方法は? SQLのような演算子と同等ですか?私はRの完全な初心者です。申し訳ありませんが、それは非常に単純な質問ですが、私はそれの周りに私の脳を得ることができませんでした。

ありがとうございました!

+1

'df_selection <-df [、grepl( "時間"、COLNAMES(DF))]これは私のために動作しません' –

+0

: エラー欄に(callJStatic( "org.apache.spark.sql.functions" 、 "col"、x)): 関数 'column'のメソッドを選択する際に引数 'x'を評価する際にエラーが発生しました:handleErrors(returnStatus、conn)のエラー – Totor

答えて

0

names()を使用してカラム名にアクセスできます(SparkDataFrameであっても)。そして、grepl()を使ってパターンにマッチするものを見つけることができます。

  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 

更新コメントの後:

最善のことは、あなたがcolのサブセットORすなわち'|'でそれを含めることであろう返し

cols <- names(df) 

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

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

注:また、このc(cols[grepl('^time.*?', names(df))], 'airline_iata')ような文字ベクトルを作成することもできますが、列名が見つからない場合はスパークがエラーをスローします。 airline_iata 'is not in名前(df) `。

+0

ありがとう!これは私の望むように機能します! 1つ最後のこと:同じ選択内の名前に「時間」がない列も選択したい場合。私はどうすればいいのですか? 私はtriyngですが、動作しません。 select(df、cols [grepl( "time"、names(df))]、 "airline_iata") – Totor

関連する問題