我正在使用R数据库,该数据库有3列,分别名为index,NAICS和HS2。数据库的头看起来像这样:
> head(base_sec)
Index NAICS HS2
1 0.4074128 1111 010110
2 0.2858026 11111 010190
3 0.1103720 11112 010210
4 -0.8084129 111120 010290
5 0.5376827 111130 010310
6 0.6021241 11114 010391
好吧,我想选择NAICS列满足给定条件的行。更具体地说,我想选择NAICS以以下任何值开头的行:
list=c("111","112", "113","114",
"115", "211", "212", "213",
"3111", "3112", "3113", "3114",
"3115", "3116","3117", "3118",
"3119", "321")
您知道如何解决此问题吗?任何想法表示赞赏。
谢谢!
答案 0 :(得分:0)
尝试一下:
out = x[substr(x$NAICS, 0, 3) %in% list | substr(x$NAICS, 0, 4) %in% list,]
希望有帮助。
答案 1 :(得分:0)
正则表达式在这里起作用。最终,我们想要这样的东西:
grepl("^(11112|11113|11114)", x$NAICS)
我们对三个字符串 starting NAICS
标识符感兴趣。 (为简洁起见,我在这里将其缩短。
您的数据,例如被截断了一点:
x <- read.table(header=TRUE, text="
Index NAICS HS2
1 0.4074128 1111 010110
2 0.2858026 11111 010190
3 0.1103720 11112 010210
4 -0.8084129 111120 010290
5 0.5376827 111130 010310
6 0.6021241 11114 010391")
l <- c("11112", "11113", "11114")
要以编程方式做到这一点:
paste0("^(", paste(l, collapse="|"), ")")
# [1] "^(11112|11113|11114)"
所以我们可以这样做:
grepl(paste0("^(", paste(l, collapse="|"), ")"), x$NAICS)
# [1] FALSE FALSE TRUE TRUE TRUE TRUE
最终
x[grepl(paste0("^(", paste(l, collapse="|"), ")"), x$NAICS),]
# Index NAICS HS2
# 3 0.1103720 11112 10210
# 4 -0.8084129 111120 10290
# 5 0.5376827 111130 10310
# 6 0.6021241 11114 10391