2017-12-01 10 views
3

オンラインcsvファイルからデータフレームを読み込んでいますが、ファイルを作成した人が間違って都市名であるべき列に数字を入力しています。テーブルcities.dataのサンプル。R数字だけを含むデータフレームエントリの数字を削除する

City  Population Foo Bar 
Seattle  10   foo1 bar1 
98125  20   foo2 bar2 
Kent 98042 30   foo3 bar3 
98042 Kent 30   foo4 bar4 

所望の出力街欄の数字だけで行を削除した後:

City  Population Foo Bar 
Seattle  10   foo1 bar1 
Kent 98042 30   foo3 bar2 
98042 Kent 30   foo4 bar4 

私は街の欄の数字のみで行を削除します。ケント98042と98042ケントはどちらも大丈夫ですので、市の名前が含まれていますが、98125は都市ではありません。

is.numericは、番号がcsvファイルの文字列として読み取られているため使用できません。正規表現を使用してみました。これは、数値だけを含むものではなく、数字だけを含む行を削除します。

City  Population Foo Bar 
Seattle  10   foo1 bar1 

"Kent 98042"この行を保持したい場合でも削除されました。 提案?お願いしてありがとう!

+0

テキストの後にその数字を保存しないでください。例えば、あなたの望む出力では、第3の観察は "Kent 98042"か、または "Kent"の罰金でなければなりませんか? – seeellayewhy

+0

文字列 'grepl("^[0-9] + "cities.data)の必須開始を追加してみてください。 – storaged

+1

都市の後ろの数字は必要ありません。" Kent "それはもっと難しいかもしれません。 &あいにく市の前に番号がある例を含めるのを忘れていました。 "^ 98042 Kent"はその行を排除するため "^"が機能しない原因となります。 – siushi

答えて

1

に:

df <- data.frame(City = c('Seattle', '98125', 'Kent 98042'), 
       Population = c(10, 20, 30), 
       Foo = c('foo1', 'foo2', 'foo3')) 
df2 <- df[-grep('^\\d+$', df$City),] 
df2 

これは

 City Population Foo 
1 Seattle   10 foo1 
3 Kent 98042   30 foo3 


を生み出すアイデアは ^\d+$を探すことです(番号のみ)を削除し、セットから削除します。両側のアンカーに気をつけてください。

+0

ありがとう!私は正規表現にあまりよく似ていませんし、私は表現の終わりを繋ぐことができるかどうかはわかりませんでした。 – siushi

+0

@シウシ:喜んでお手伝いします。 – Jan

0
df = read.table(text = " 
City  Population Foo Bar 
Seattle  10   foo1 bar1 
98125  20   foo2 bar2 
Kent98042 30   foo3 bar2 
", header=T, stringsAsFactors=F) 

library(dplyr) 

df %>% filter(is.na(as.numeric(City))) 

#  City Population Foo Bar 
# 1 Seattle   10 foo1 bar1 
# 2 Kent98042   30 foo3 bar2 

アイデアは、我々は文字変数にas.numericを適用すると、それが数である場合にのみ、NA値を返さないということです。

あなたは基本Rを使用したい場合は、この使用することができます:平野Rdf[is.na(as.numeric(df$City)),]

1

あなたは、すべての都市の列の数値を必要としない場合:

cities.data$City <- gsub("[0-9]+", "", cities.data$City) # replace all numbers with empty string 
cities.data <- cities.data[cities.data$City!="",] # drop observations that are only empty strings 

編集:これは数字が文字列内の任意の場所にすることができ、あなたの更新の例ではすべてのケースを処理する必要があります。

+0

ありがとう!これは私が探していたものよりも一歩前だから素晴らしいことです。 – siushi

+0

素敵!、うれしい!それがあなたが使ったものなら、私はあなたが私の答えを受け入れることを感謝します。 – seeellayewhy

関連する問題