2013-04-18 2 views
0

Я хочу выбрать строки из фрейма данных в соответствии с некоторыми условиями. Обычно я выбираю значения с помощью оператора % in %. Для выбора значений я использовал множество %in%.Комбинируйте 2 или более оператора в R

val1 <- portData [portData$PmkVal %in% c(NA),] 
    val2 <- val1 [val1$Quantity %in% c(NA),] 
    weigtageData <- val2 [val2$MktVal %in% c(NA),] 

Могу ли я написать все эти заявления в одной строке и выбрать данные из кадра portData сам вместо того, чтобы писать этот неэффективный код?

+1

Если я правильно понял, вы пытаетесь удалить NA в переменных 'PmkVal' и' Quality' в 'portData'? Как насчет 'portData [is.na (portData $ PmkVal) & is.na (portData $ Quality) & is.na (portData% MktVal),]'? –

+0

waaw, .. это хорошая идея .. спасибо :) –

ответ

4

Во-первых, поскольку вы проверяете NA, вы можете использовать приятную удобную функцию is.na(.). То есть,

val1 <- portData [is.na(portData$PmkVal), ] 
val2 <- val1[is.na(val1$Quantity), ] 
weigtageData <- val2[is.na(val2$MktVal), ] 

Теперь вы можете использовать &, чтобы соединить все это вместе в одной команде следующим образом:

weigtageDate <- portData[is.na(portData$PmkVal) & 
         is.na(portData$Quantity) & 
         is.na(portData$MktVal), ] 

Даже лучше, чтобы использовать with здесь, так что вам не нужно использовать portData$ каждый раз.

weigtageData <- portData[with(portData, is.na(PmkVal) & 
          is.na(Quantity) & is.na(MktVal)), ] 

Конечно то же переводит %in%, а также. Здесь просто не нужно.

1

Еще один вариант будет использовать функцию complete.cases если вы проверяете для NA-х:

test <- matrix(sample(20),ncol=5) 
colnames(test) <- c("A","B","C","D","E") 

test[2,1] <- NA 
test[3,1] <- NA 
test[4,2] <- NA 

test[complete.cases(test),] 
test[complete.cases(test[,2]),] 
test[complete.cases(test[,c(1,2)]),] 

EDIT: Для того, чтобы сохранить только те строки, с отсутствующими значениями внутри, вы инвертировать вызов через ! как:

test[!complete.cases(test),] 
+1

Это хорошо, однако вы можете * отменить вывод. OP хочет * сохранить * столбцы с NA в них. – Arun

+0

Ах, вы правы, извините! Я отредактирую свое сообщение соответственно. –

Смежные вопросы