9

我是 R 新手,无法理解这个概念。假设我有一个名为“places”的表,其中包含 3 个列 - 城市、人口和夏季平均温度

假设我想“过滤” - 生成一个人口少于 100 万且夏季平均温度大于 70 度的新表格对象。

在我使用过的任何其他程序中,这将非常容易,但是在进行了一些研究后,我使自己陷入了更大的困惑。鉴于 R 的目的和它的作用,这一定是非常简单的东西。

我如何将上述条件应用于表格?步骤是什么?据我了解,我不能轻易地根据他们的名字选择表格标题,这很好(例如 WHERE city < 1,000,000 )

4

2 回答 2

20

给定一个数据框“dfrm”,其中包含“city”列中的城市名称、“population”列中的人口和“meanSummerT”列中的夏季平均温度,您对满足这些联合要求的子集的请求将得到满足使用以下任何一种:

subset( dfrm, population < 1e6 & meanSummerT > 70)
dfrm[ which(dfrm$population < 1e6 & dfrm$meanSummerT > 70) , ]
dfrm[ which( dfrm[[ 'population' ]] < 1e6 & dfrm[[ 'meanSummerT' ]] > 70) , ]

如果您只想要符合这些联合标准的城市名称,那么这些将起作用:

subset( dfrm, population < 1e6 & meanSummerT > 70 , city)
dfrm[ which(dfrm$population < 1e6 & dfrm$meanSummerT > 70) , "city" ]
dfrm[ which(dfrm[['population']] < 1e6 & dfrm[['meanSummerT']] > 70) , "city" ]

请注意,列名没有在子集中或在“$”运算符之后被引用,而是在“[[”中被引用。请注意,which如果没有数据行匹配,则使用可能很危险,因为您将获得整个数据帧,而不是没有行。

于 2013-01-07T23:31:41.017 回答
14

你正在寻找subset

如果您的数据被调用mydata

newdata <- subset(mydata, city < 1e6)

或者你可以使用[,这在编程上更安全

newdata <- mydata[mydata$city < 1e6]

用于多于一种条件&|在适当的情况下使用

你也可以使用sqldf包来使用sql

library(sqldf)

newdata <-  sqldf('select * from mydata where city > 1e6')

或者你可以使用data.tablewhich 使语法更容易[(以及内存效率)

library(data.table)

mydatatable <- data.table(mydata)
newdata <- mydatatable[city > 1e6]
于 2013-01-07T23:04:38.213 回答