从符合特定条件的数据框中提取所有行

时间:2020-05-22 11:15:59

标签: r dataframe

我在R中有一个数据框,其中的一列包含状态缩写,例如'AL','MD'等。

说我想提取状态='AL'的数据,然后满足以下条件 dataframe ['AL',]似乎只返回一行,而针对此状态有多行。

有人可以帮助我理解这种方法中的错误吗?

2 个答案:

答案 0 :(得分:1)

这应该有效

mydataframe[mydataframe$state == "AL",]

或者如果您想要多个状态

mydataframe[mydataframe$state %in% c("AL","MD"),]

答案 1 :(得分:0)

在R中,总有多种方法可以做某事。我们将说明三种不同的技术,这些技术可用于根据逻辑条件对数据帧中的数据进行子集化。

我们将使用2012年美国医院比较数据库中的数据。我们将检查数据是否已经下载到磁盘上,如果没有,请下载并解压缩。

if(!file.exists("outcome-of-care-measures.zip")){
     dlMethod <- "curl"
     if(substr(Sys.getenv("OS"),1,7) == "Windows") dlMethod <- "wininet"
     url <- "https://d396qusza40orc.cloudfront.net/rprog%2Fdata%2FProgAssignment3-data.zip"
     download.file(url,destfile='outcome-of-care-measures.zip',method=dlMethod,mode="wb")
     unzip(zipfile = "outcome-of-care-measures.zip")    
}

## read outcome data & keep hospital name, state, and some
## mortality rates. Notice that here we use the extract operator
## to subset columns instead of rows 
theData <- read.csv("outcome-of-care-measures.csv",
                    colClasses = "character")[,c(2,7,11,17,23)]

第一个技术与另一个答案中的一个相匹配,但是我们在子集操作期间使用了$[[形式的提取运算符对此进行了说明。

# technique 1: extract operator
aSubset <- theData[theData$State == "AL",]
table(aSubset$State)

AL 
98 

aSubset <- theData[theData[["State"]] == "AL",]
table(aSubset$State)

AL 
98 
> 

接下来,我们可以使用诸如subset()之类的Base R函数进行子集化。

# technique 2: subset() function
aSubset <- subset(theData,State == "AL")
table(aSubset$State)

AL 
98 
>

最后,对于tidyverse粉丝,我们将使用dplyr::filter()

# technique 3: dplyr::filter()
aSubset <- dplyr::filter(theData,State == "AL")
table(aSubset$State)
AL 
98 
> 
相关问题