0

I want to select rows from a data frame according to some conditions. I usually select values using % in % operator. I used many %in% for selecting values.

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

Can i write all these statements in one line and select data from frame portData itself instead of writing this inefficient code?

4

2 回答 2

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%一样。只是这里没有必要。

于 2013-04-18T10:56:25.383 回答
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)]),]

编辑:为了只保留内部缺少值的行,您必须通过以下方式反转调用!

test[!complete.cases(test),]
于 2013-04-18T11:01:39.707 回答