Проверка, существует ли имя строки во фрейме данных? - PullRequest
2 голосов
/ 28 ноября 2011

Я хотел бы обратиться к строкам фрейма данных по имени строки, и таблица будет построена последовательно. Я хочу сделать что-то вроде

> 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 может возникнуть иначе?

Ответы [ 3 ]

4 голосов
/ 29 ноября 2011

как то так

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

может добиться цели.

2 голосов
/ 29 ноября 2011

Вот немного другой подход, если вы хотите проверить несколько городов за один раз.Это может помочь ускорить процесс ...

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"
1 голос
/ 29 ноября 2011

Есть много способов сделать это.Одна из самых простых - использовать функцию any () следующим образом:

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

Поскольку это возвращает логическое значение, вы можете по своему усмотрению переходить из него.

...