3

データフレームの行を文字列名でアドレス指定したいのですが、テーブルは順番に作成されます。こんなことしたい

> mytab <- data.frame(city=c("tokyo","delhi","lima"),price=c(9,8,7),row.names=1)
> mytab
      price
tokyo     9
delhi     8
lima      7 
> # I can add a new row
> mytab["london",] = 8.5

次に、行名がすでに存在するかどうかを確認する必要があります。

> mytab["ny",]
[1] NA

私ができること以外に何か良いことはありますか

> if (is.na(mytab["ny",])) { mytab["ny",]=9;}

NAそうでなければ発生する可能性があるので?

4

3 に答える 3

5

このようなもの

if (!('ny' %in% row.names(mytab))) {mytab['ny',]=9}

トリックを行う可能性があります。

于 2011-11-28T20:13:33.663 に答える
3

これを行う方法はたくさんあります。最も簡単な方法の1つは、次のようなany()関数を使用することです。

# Returns true if any of the row names is 'lima', false otherwise.
any(row.names(mytab) == 'lima')

これはブール値を返すので、必要に応じて条件を分岐できます。

于 2011-11-28T20:28:05.060 に答える
2

複数の都市を一度にチェックしたい場合は、少し異なるアプローチがあります。それは物事をスピードアップするのに役立つかもしれません...

mytab <- data.frame(city=c("tokyo","delhi","lima"),price=c(9,8,7),row.names=1)

# Check several cities in one go:
newcities <- c('foo', 'delhi', 'bar')

# Returns the missing cities:
setdiff(newcities, row.names(mytab))
#[1] "foo" "bar"

# Returns the existing cities:
intersect(newcities, row.names(mytab))
#[1] "delhi"
于 2011-11-28T21:07:05.450 に答える