我在R中有一个数据框,其中的一列包含状态缩写,例如'AL','MD'等。
说我想提取状态='AL'的数据,然后满足以下条件 dataframe ['AL',]似乎只返回一行,而针对此状态有多行。
有人可以帮助我理解这种方法中的错误吗?
答案 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
>