cavion dataFrame“ dfrm”,带有“城市”列中的城市名称,“人口”列中的人口和“ Meansummert”列中的夏季温度,您对符合这些联合要求的子集请求的要求是遇到了任何一个:
subset( dfrm, population < 1e6 & meanSummerT > 70)
dfrm[ which(dfrm$population < 1e6 & dfrm$meanSummerT > 70) , ]
dfrm[ which( dfrm[[ 'population' ]] < 1e6 & dfrm[[ 'meanSummerT' ]] > 70) , ]
如果您只想符合这些联合标准的城市的名称,那么这些都会起作用:< 1,000,000 )
注意,该列名在子集中没有引用或遵循“ $”运算符,但在“ [“ [”中引用。并请注意,如果没有数据匹配行,则使用
which
可能是危险的,因为您不会获得整个数据框架。
您正在寻找
subset
如果您的数据称为
mydata
或您可以使用
[
,这是程序上更安全的
newdata <- mydata[mydata$city < 1e6]
为多种条件使用
&
或|
您也可以使用
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]
使用{dplyr}在r中填充数据非常简单,就像您预期的那样:
library(dplyr)
data <- tibble(city = c("Santiago", "Concepcion", "Valparaiso"),
population = c(7116706, 1036142, 1054253),
temperature = c(22.8, 17.6, 17.5))
data |>
filter(population > 2000000)
#> # A tibble: 1 × 3
#> city population temperature
#> <chr> <dbl> <dbl>
#> 1 Santiago 7116706 22.8
data |>
filter(population > 1000000,
temperature >= 17.6)
#> # A tibble: 2 × 3
#> city population temperature
#> <chr> <dbl> <dbl>
#> 1 Santiago 7116706 22.8
#> 2 Concepcion 1036142 17.6
用Rreprexv2.1.1
于2025-02-14创建