2

別の変数からの文字列条件に基づいて、データフレームの新しい変数を設定しています。次のエラー メッセージが表示されます。

Error in Source == "httpWWW.BGDAILYNEWS.COM" | Source == : operations are possible only for numeric, logical or complex types

私のコードは次のとおりです。

County <- ifelse(Source == 'httpWWW.BGDAILYNEWS.COM' | 'WWW.BGDAILYNEWS.COM', 'Warren', ifelse(Source == 'httpWWW.HCLOCAL.COM' | 'WWW.HCLOCAL.COM', 'Henry', ifelse(Source == 'httpWWW.KENTUCKY.COM' | 'WWW.KENTUCKY.COM', 'Fayette', ifelse(Source == 'httpWWW.KENTUCKYNEWERA.COM' | 'WWW.KENTUCKYNEWERA.COM', 'Christian') )))

4

2 に答える 2

7

ifelse深くネストされたステートメントを、より管理しやすいチャンクに分割する ことをお勧めします。

しかし、エラーは、そのように使用できないことを示しています|'a' | 'b'論理的な比較なので意味がありません。代わりに次を使用します%in%

Source %in% c('htpWWW.BGDAILYNEWS.com', 'WWW.BGDAILYNEWS.COM')

私は思う...あなたが何をしているのか理解できれば、複数の割り当てを使用する方がはるかに良いでしょう:

County = vector(mode='character', length=length(Source))
County[County %in% c('htpWWW.BGDAILYNEWS.com', 'WWW.BGDAILYNEWS.COM')] <- 'Warren'
etc.

switchこのタイプのステートメントを使用することもできます。

myfun <- function(x) {
  switch(x,
         'httpWWW.BGDAILYNEWS.COM'='Warren',
         'httpWWW.HCLOCAL.COM'='Henry',
         etc...)
}

sapply次に、各要素を に渡す単純な apply( ) を実行Sourcemyfunます。

County = sapply(Source, myfun)

factorsまたは最後に、 andを使用することもできますがlevels、それは演習として読者に任せます...

于 2013-07-25T18:50:12.913 に答える
6

別のアプローチ:

county <- c("Warren","Henry","Fayette","Christian")
sites <- c("WWW.BGDAILYNEWS.COM","WWW.HCLOCAL.COM","WWW.KENTUCKY.COM","WWW.KENTUCKYNEWERA.COM")
County <- county[match(gsub("^http","",Source), sites)]

NAこれは、指定された入力のいずれにも一致しない文字列に対して返されます。

Hadley の提案 ( lookup-tables-character-subsetting ) を使用する:

lookup <- c(WWW.BGDAILYNEWS.COM="Warren", WWW.HCLOCAL.COM="Henry", WWW.KENTUCKY.COM="Fayette", WWW.KENTUCKYNEWERA.COM="Christian")
County <- unname(lookup[gsub("^http","",Source)])
于 2013-07-25T18:51:49.327 に答える