在 R 中使用逻辑运算符,一个简单的问题
Using logical operators in R, A quick question
我正在使用 R 中名为“USArrests”的数据集。我想获取那些谋杀率 >8,袭击率 >170,强奸率 >21 的州。
Murder Assault UrbanPop Rape states
Alabama 13.2 236 58 21.2 Alabama
Alaska 10.0 263 48 44.5 Alaska
Arizona 8.1 294 80 31.0 Arizona
Arkansas 8.8 190 50 19.5 Arkansas
California 9.0 276 91 40.6 California
Florida 15.4 335 80 31.9 Florida
Georgia 17.4 211 60 25.8 Georgia
Illinois 10.4 249 83 24.0 Illinois
Kentucky 9.7 109 52 16.3 Kentucky
Louisiana 15.4 249 66 22.2 Louisiana
Maryland 11.3 300 67 27.8 Maryland
Michigan 12.1 255 74 35.1 Michigan
Mississippi 16.1 259 44 17.1 Mississippi
Missouri 9.0 178 70 28.2 Missouri
Nevada 12.2 252 81 46.0 Nevada
New Mexico 11.4 285 70 32.1 New Mexico
New York 11.1 254 86 26.1 New York
North Carolina 13.0 337 45 16.1 North Carolina
South Carolina 14.4 279 48 22.5 South Carolina
Tennessee 13.2 188 59 26.9 Tennessee
Texas 12.7 201 80 25.5 Texas
Virginia 8.5 156 63 20.7 Virginia
NA NA NA NA NA <NA>
NA.1 NA NA NA NA <NA>
NA.2 NA NA NA NA <NA>
NA.3 NA NA NA NA <NA>
NA.4 NA NA NA NA <NA>
NA.5 NA NA NA NA <NA>
NA.6 NA NA NA NA <NA>
NA.7 NA NA NA NA <NA>
NA.8 NA NA NA NA <NA>
NA.9 NA NA NA NA <NA>
NA.10 NA NA NA NA <NA>
NA.11 NA NA NA NA <NA>
NA.12 NA NA NA NA <NA>
NA.13 NA NA NA NA <NA>
NA.14 NA NA NA NA <NA>
NA.15 NA NA NA NA <NA>
NA.16 NA NA NA NA <NA>
NA.17 NA NA NA NA <NA>
NA.18 NA NA NA NA <NA>
NA.19 NA NA NA NA <NA>
NA.20 NA NA NA NA <NA>
NA.21 NA NA NA NA <NA>
NA.22 NA NA NA NA <NA>
NA.23 NA NA NA NA <NA>
NA.24 NA NA NA NA <NA>
NA.25 NA NA NA NA <NA>
NA.26 NA NA NA NA <NA>
NA.27 NA NA NA NA <NA>
NA.28 NA NA NA NA <NA>
NA.29 NA NA NA NA <NA>
NA.30 NA NA NA NA <NA>
NA.31 NA NA NA NA <NA>
NA.32 NA NA NA NA <NA>
NA.33 NA NA NA NA <NA>
NA.34 NA NA NA NA <NA>
NA.35 NA NA NA NA <NA>
NA.36 NA NA NA NA <NA>
NA.37 NA NA NA NA <NA>
NA.38 NA NA NA NA <NA>
NA.39 NA NA NA NA <NA>
NA.40 NA NA NA NA <NA>
NA.41 NA NA NA NA <NA>
NA.42 NA NA NA NA <NA>
NA.43 NA NA NA NA <NA>
NA.44 NA NA NA NA <NA>
这是我的代码
USArrests.1=USArrests[c(USArrests$Murder>8, USArrests$Assault>170, USArrests$Rape>21),].
我的问题是,编写此代码使其没有“NA”行的更有效方法是什么?我知道我可以使用“&”运算符,但它只适用于两个而不是三个?谢谢
看来您是在连接逻辑运算符,而不是使用 &
“and”语句对它们进行求值。
conditions <- USArrests$Murder>8 & USArrests$Assault>170 & USArrests$Rape >21
USArrests[conditions,]
注意 conditions
是一系列 TRUE 和 FALSE。
或者,可以使用 which()
到 return 索引(行),这将具有完全相同的结果,但可能有用:
which(conditions)
# [1] 1 2 3 5 9 10 13 18 20 22 25 28 31 32 40 42 43
USArrests[conditions,]
一些包使子集更直观,例如 data.table 包。
#install.packages("data.table") #uncomment to install
library(data.table)
USArrests_dt <- as.data.table(USArrests)
USArrests_dt[Murder>8 & Assault>170 & Rape > 21]
这对于非常大的数据集更好,并且具有方便的打印设置。它比您应该首先掌握的常规 data.frame 稍微复杂一些。
我正在使用 R 中名为“USArrests”的数据集。我想获取那些谋杀率 >8,袭击率 >170,强奸率 >21 的州。
Murder Assault UrbanPop Rape states
Alabama 13.2 236 58 21.2 Alabama
Alaska 10.0 263 48 44.5 Alaska
Arizona 8.1 294 80 31.0 Arizona
Arkansas 8.8 190 50 19.5 Arkansas
California 9.0 276 91 40.6 California
Florida 15.4 335 80 31.9 Florida
Georgia 17.4 211 60 25.8 Georgia
Illinois 10.4 249 83 24.0 Illinois
Kentucky 9.7 109 52 16.3 Kentucky
Louisiana 15.4 249 66 22.2 Louisiana
Maryland 11.3 300 67 27.8 Maryland
Michigan 12.1 255 74 35.1 Michigan
Mississippi 16.1 259 44 17.1 Mississippi
Missouri 9.0 178 70 28.2 Missouri
Nevada 12.2 252 81 46.0 Nevada
New Mexico 11.4 285 70 32.1 New Mexico
New York 11.1 254 86 26.1 New York
North Carolina 13.0 337 45 16.1 North Carolina
South Carolina 14.4 279 48 22.5 South Carolina
Tennessee 13.2 188 59 26.9 Tennessee
Texas 12.7 201 80 25.5 Texas
Virginia 8.5 156 63 20.7 Virginia
NA NA NA NA NA <NA>
NA.1 NA NA NA NA <NA>
NA.2 NA NA NA NA <NA>
NA.3 NA NA NA NA <NA>
NA.4 NA NA NA NA <NA>
NA.5 NA NA NA NA <NA>
NA.6 NA NA NA NA <NA>
NA.7 NA NA NA NA <NA>
NA.8 NA NA NA NA <NA>
NA.9 NA NA NA NA <NA>
NA.10 NA NA NA NA <NA>
NA.11 NA NA NA NA <NA>
NA.12 NA NA NA NA <NA>
NA.13 NA NA NA NA <NA>
NA.14 NA NA NA NA <NA>
NA.15 NA NA NA NA <NA>
NA.16 NA NA NA NA <NA>
NA.17 NA NA NA NA <NA>
NA.18 NA NA NA NA <NA>
NA.19 NA NA NA NA <NA>
NA.20 NA NA NA NA <NA>
NA.21 NA NA NA NA <NA>
NA.22 NA NA NA NA <NA>
NA.23 NA NA NA NA <NA>
NA.24 NA NA NA NA <NA>
NA.25 NA NA NA NA <NA>
NA.26 NA NA NA NA <NA>
NA.27 NA NA NA NA <NA>
NA.28 NA NA NA NA <NA>
NA.29 NA NA NA NA <NA>
NA.30 NA NA NA NA <NA>
NA.31 NA NA NA NA <NA>
NA.32 NA NA NA NA <NA>
NA.33 NA NA NA NA <NA>
NA.34 NA NA NA NA <NA>
NA.35 NA NA NA NA <NA>
NA.36 NA NA NA NA <NA>
NA.37 NA NA NA NA <NA>
NA.38 NA NA NA NA <NA>
NA.39 NA NA NA NA <NA>
NA.40 NA NA NA NA <NA>
NA.41 NA NA NA NA <NA>
NA.42 NA NA NA NA <NA>
NA.43 NA NA NA NA <NA>
NA.44 NA NA NA NA <NA>
这是我的代码
USArrests.1=USArrests[c(USArrests$Murder>8, USArrests$Assault>170, USArrests$Rape>21),].
我的问题是,编写此代码使其没有“NA”行的更有效方法是什么?我知道我可以使用“&”运算符,但它只适用于两个而不是三个?谢谢
看来您是在连接逻辑运算符,而不是使用 &
“and”语句对它们进行求值。
conditions <- USArrests$Murder>8 & USArrests$Assault>170 & USArrests$Rape >21
USArrests[conditions,]
注意 conditions
是一系列 TRUE 和 FALSE。
或者,可以使用 which()
到 return 索引(行),这将具有完全相同的结果,但可能有用:
which(conditions)
# [1] 1 2 3 5 9 10 13 18 20 22 25 28 31 32 40 42 43
USArrests[conditions,]
一些包使子集更直观,例如 data.table 包。
#install.packages("data.table") #uncomment to install
library(data.table)
USArrests_dt <- as.data.table(USArrests)
USArrests_dt[Murder>8 & Assault>170 & Rape > 21]
这对于非常大的数据集更好,并且具有方便的打印设置。它比您应该首先掌握的常规 data.frame 稍微复杂一些。