R - 测试Data.Frame单元格是否为空/空

时间:2017-01-20 10:46:24

标签: sql-server r boolean-expression

我将数据从SQL Server 2016通过外部脚本存储过程传递给R进行处理。

我想做e或不做,取决于数据框中位置[I,11]的单元格是否具有整数值。

for(i in 1:2){
    if(d1[i,11]==""){
        d2[i,1]<-d1[i,1]
        d2$Ledger<-d1[i,2]
        d2$Account<-d1[i,3]
        d2$Title<-d1[i,4]
        d2$ActualTitle<-d1[i,5]
        d2$AccountNumber<-d1[i,6]
        d2$Sortcode<-d1[i,7]
        d2$PostCode1<-d1[i,8]
        d2$PostCode2<-d1[i,9]
        d2$AddressName<-d1[i,10]
        d2$MatchedID<-d1[i,11]
    }

我正在努力找到一种方法,请帮忙。

2 个答案:

答案 0 :(得分:0)

进一步测试显示存储的值在R中为NA,并且使用函数is.na(表达式)产生布尔返回。

for(i in 1:2){
    if(is.na(d1[i,11])){
        d2[i,1]<-d1[i,1]
        d2$Ledger<-d1[i,2]

答案 1 :(得分:0)

最好的方法不是使用循环。当数据帧的大小很大时,向量操作会更好。

要检查某些内容是否为<NA>,请使用:

if(is.na(item))

如果项目为TRUE,则会返回<NA>,否则为FALSE。 SQL中的任何缺失值都将在R中表示为<NA>。同样,您可以使用is.integer(item)来检查某些内容是否为整数。

然后,您可以使用以下选项操作数据框的列:

dataframe$columnname[which(is.na(dataframe$column))] <- new_value

您也可以使用ifelse执行相同的操作:

> dataframe$columnname <- ifelse(is.na(dataframe$column), value_for_if_satisfied, value_for_else_satisfied)