2016-12-19 11 views
0

RとRStudio Serverを使用してSparkプラットフォームで作業しています。特定の列(文字列)が数値の条件を満たす場合、tblをフィルタリングします。したがって、列には数値/整数値( '1234')と文字列値( 'x1234')の両方が含まれており、後者を除外します。R dplyr指定された列の数値に関する行

これはdyplrを使用して可能ですか?たとえば、フィルタ演算子/関数を使用しますか?

私のようなものを試してみました:ところで

tbl2 <- tbl %>% filter(!is.numeric(col1)) 

:データは他のサーバーに保存されている、私は、ローカルにデータをロードする必要はありません。したがって、私はデータフレームのようなオブジェクトを使用することができません。私はdyplrのようなライブラリに縛られています。

お願いします。

答えて

3

私はdonotと思うこの作品:tbl2 <- tbl %>% filter(!is.numeric(col1))。 tbl_dfまたはdfでは、各列には1つのクラスしかありません。あなたの場合、 "123"と "x123"を含むcol1は "文字"クラスでなければなりません。

可能な解決策の1つは、col1を数値として変換し、変換が成功するかどうかをテストすることです。

tbl2 <- tbl %>% filter(!is.na(as.numeric(col1))) 

試験:

library(data.frame) 
df <- data.frame(a=1:3,b=2:4) 
df[2,2] <- "x123" 
class(df$b) 
# "character" 
df %>% filter(!is.na(as.numeric(b))) 
# a b 
#1 1 2 
#2 3 4 

注:警告メッセージがあります。

2

2つの方法があります。正規表現を使用して数字に変換できる文字列を特定できます(grepl("^[0-9]$", c("1", "1.x", "x.1", "5.5"), perl = T)Regex for numbers only)など)。

もう一つの方法は、;-)

アップ、ちょうど分遅すぎる例えば、 filter(!is.na(as.numeric(c("1", "1.x", "x.1", "5.5"))))

編集、ちょうどas.numericのように数値に文字列の変換を強制し、NA Sをフィルタリングすることです

関連する問題