2016-09-29 44 views
2

我想删除所有包含UPPERCASE个词的行。R-grep删除UPPER个案行

我的数据是这样的:

         dt 
1  TRAVEL AND UNSPECIFIED TIME USE 
2      TRAVEL BY PURPOSE 
3 Travel related to unspecified time use 
4 Travel related to personal business 

我不明白为什么这不工作

dt[-c(grep('[A-Z]', dt$dt)) , ] 

因为,奇怪的是它工作时,我就产生像mtcars此随机数据:

l = sample(c(letters[1:16], LETTERS[1:16])) 
mtcars$code = l 
mtcars[-c(grep('[A-Z]', mtcars$code)) , ] 

有人可以帮助我吗?

dt = c("TRAVEL AND UNSPECIFIED TIME USE", 
"TRAVEL BY PURPOSE", 
"Travel related to unspecified time use", 
"Travel related to personal business") 
dt = as.data.frame(dt) 
dt$dt = as.character(dt$dt) 

回答

3

除了资金letteres,也有空间,所以我们可以在grepl匹配串的一个或多个大写字母,包括从开始(^)空间([A-Z ]+)结束($)和否定(!)返回包含小写或小写大写(混合)或所有其他可能性的元素。

dt[!grepl("^[A-Z ]+$",dt$dt),, drop = FALSE] 
#         dt 
#3 Travel related to unspecified time use 
#4 Travel related to personal business 

在OP的其它示例 'L',只有每串中的单个字符。所以,使用[A-Z]的作品,但是,最好不要使用-。例如,假设我们有小写所有元素

v1 <- c('a', 'aB', 'b') 
v1[-grep("^[A-Z]+$", v1)] 
#character(0) 

作为

grep("^[A-Z]+$", v1) 
#integer(0) 

然而,否定(!)的载体将得到预期的输出

v1[!grepl("^[A-Z]+$", v1)] 
#[1] "a" "aB" "b" 
+0

否定不起作用。但其余的是。 – giacomo

+0

@giacomoV它是'grepl'而不是'grep'。 – akrun

+1

aaaaaaaaaaaaaaaah!谢谢 !超。 – giacomo