我想通过字符串名称来处理数据帧的行,并且表将按顺序构建。我想做像
这样的事情> 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
?
答案 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')
由于这会返回一个布尔值,您可以根据需要从中分支条件。