在R中的运算符中组合2个或更多

时间:2013-04-18 10:52:59

标签: r dataframe

我想根据某些条件从数据框中选择行。我通常使用% in %运算符选择值。我使用了很多%in%来选择值。

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

我可以在一行中编写所有这些语句并从帧portData本身中选择数据,而不是编写这个效率低下的代码吗?

2 个答案:

答案 0 :(得分: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 :(得分:1)

另一个选择是使用complete.cases功能,如果您检查NA&#39>:

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),]