根据条件过滤数据框中的数据

Dou*_*Fir 7 r subset

我是R的新手,无法掌握这个概念.假设我有一个名为"places"的表格,其中包含3个列 - 城市,人口和夏季平均温度

假设我想"过滤" - 产生一个新的表格对象,其中人口少于100万,夏季平均温度大于70度.

在我使用的任何其他程序中,这将非常简单,但是我做了一些研究,我正在努力让自己陷入更大的困惑.鉴于R的目的和它的作用,这必须是非常简单的东西.

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

42-*_*42- 18

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

subset( dfrm, population < 1e6 & meanSummerT > 70)
dfrm[ which(dfrm$population < 1e6 & dfrm$meanSummerT > 70) , ]
dfrm[ which(dfrm[['population']] < 1e6 & dfrm[['meanSummerT']] > 70) , ]
Run Code Online (Sandbox Code Playgroud)

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

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" ]
Run Code Online (Sandbox Code Playgroud)

请注意,列名未在子集中引用或在"$"运算符后引用,但它们在"[["内引用


mne*_*nel 13

你在找 subset

如果您的数据被调用 mydata

newdata <- subset(mydata, city < 1e6)
Run Code Online (Sandbox Code Playgroud)

或者您可以使用[,这在程序上更安全

newdata <- mydata[mydata$city < 1e6]
Run Code Online (Sandbox Code Playgroud)

对于多个条件使用&或适用的|地方

您也可以使用该sqldfsql

library(sqldf)

newdata <-  sqldf('select * from mydata where city > 1e6')
Run Code Online (Sandbox Code Playgroud)

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

library(data.table)

mydatatable <- data.table(mydata)
newdata <- mydatatable[city > 1e6]
Run Code Online (Sandbox Code Playgroud)