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;}

因为 aNA可能会以其他方式出现?

4

3 回答 3

5

像这样的东西

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

可能会成功。

于 2011-11-28T20:13:33.663 回答
3

有很多方法可以做到这一点。最简单的方法之一是像这样使用 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 回答