2017-01-20 3 views
0

Я передаю данные с SQL Server 2016 через хранимую процедуру внешнего скрипта в R для обработки.R - проверить, является ли ячейка Data.Frame NULL/пустой

Я хочу либо делать, либо не делать 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] 
    } 

Я изо всех сил пытаюсь найти способ сделать это, пожалуйста, помогите.

ответ

0

Дальнейшее тестирование показало, что сохраненное значение было NA в R, а использование функции is.na (выражение) дало логическое возвращение.

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

Лучшим подходом было бы не использование цикла. Операции с вектором лучше, когда размер кадра данных огромен.

Для проверки что-то, является ли <NA>, использование:

if(is.na(item)) 

Это возвратит TRUE если деталь <NA>, иначе FALSE. Любое отсутствующее значение из SQL будет представлено как <NA> в R. Аналогичным образом вы можете использовать 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) 
Смежные вопросы