我是R的新手,无法掌握这个概念。假设我有一个名为“places”的表,其中包含3个列 - 城市,人口和平均夏季温度
假设我想“过滤” - 产生一个新的表格对象,其中人口少于100万,夏季平均温度大于70度。
在我使用过的任何其他程序中,这都很容易,但是做了一些研究后,我正在努力让自己更加困惑。鉴于R的目的和它的作用,这必须是非常简单的东西。
我如何将上述条件应用于表格?步骤是什么?根据我的理解,我不能轻易地根据他们的名字选择表格标题,这样会很好(例如WHERE city< 1,000,000)
答案 0 :(得分:17)
给定一个数据框“dfrm”,其中包含“城市”列中城市的名称,“人口”列中的人口以及“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" ]
请注意,列名未在子集中引用或在“$”运算符后引用,但它们在“[[”
中引用答案 1 :(得分:12)
您正在寻找subset
如果您的数据被调用mydata
newdata <- subset(mydata, city < 1e6)
或者您可以使用[
,programatically safer
newdata <- mydata[mydata$city < 1e6]
对于多个条件,请使用&
或|
其中approriate
您还可以使用sqldf
包来使用sql
library(sqldf)
newdata <- sqldf('select * from mydata where city > 1e6')
或者您可以使用data.table
使[
的语法更容易(以及提高内存效率)
library(data.table)
mydatatable <- data.table(mydata)
newdata <- mydatatable[city > 1e6]