如果dataframe为空,如何编写if / else语句

时间:2016-02-12 15:24:16

标签: r

R中的新编码需要一些帮助

我想说: 如果数据框中没有任何内容打印no_match 如果有什么东西将它绑定到df2的ID

if(df == []){
print("nomatch")
}else{
cbind(df, df2$id2)
}

2 个答案:

答案 0 :(得分:7)

您可以通过dim获取有关数据框尺寸的信息。例如,运行代码:

data(mtcars)
dim(mtcars)

会显示尺寸:

[1] 32 11

对于NULL对象,您将得到:

mtcars <- NULL
dim(mtcars)
NULL

dim非常灵活,例如data.frame没有行:

mtcars <- mtcars[-c(1:dim(mtcars)[1]),]

你会得到

> dim(mtcars)
[1]  0 11

IF语句

构建if语句非常简单,取决于您想要检查的内容

对象为NULL

*对象为NULL,没有行没有列。

if (dim(df) == NULL) {
}

没有行

此数据框包含列,但没有观察结果。

if (dim(df)[1] == 0) {

}

没有列

*对象仍属于data.frame类,但没有数据。

if (dim(df)[2] == 0) {

}

你会像那样构建对象(如果感兴趣的话):

data(mtcars)
mtcars <- mtcars[,-c(1:dim(mtcars)[2])]

当然,您可以结合使用条件来检查两个数据帧或为空的的一个事件。

答案 1 :(得分:5)

这取决于你的data.frame实际上是空的还是你认为空的所有元素。

如果data.frame为空,则可以使用nrow进行简单检查。

tmp <- data.frame(A = numeric())
nrow(tmp)
[1] 0

if(nrow(tmp) == 0){
    print("data.frame is empty")
}else{
    print("data.frame contains data")
}

编辑 - OP询问对象是否存在

您可以使用exists

检查对象是否已定义
exists("tmp2")
[1] FALSE
exists("tmp")
[1] TRUE