检查数据框中是否存在行名?

时间:2011-11-28 19:55:30

标签: r dataframe rowname

我想通过字符串名称来处理数据帧的行,并且表将按顺序构建。我想做像

这样的事情
> 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 个答案:

答案 0 :(得分:4)

像这样的东西

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

可能会成功。

答案 1 :(得分: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"

答案 2 :(得分:1)

有很多方法可以做到这一点。最简单的方法之一就是使用这样的any()函数:

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

由于这会返回一个布尔值,您可以根据需要从中分支条件。