这很简单,但我无法100%正确!
我的数据列如下:
"424343 Amsterdam center"
"343423 London 42 ......"
"3434 Prague ........."
"343345 Bratislava ...."
"! last entry ..... 25.08.2014..."
"Berlin"
...
...
我想用空字符串""
替换以字母开头的所有行我试过了:
dataframe$column[grepl("(^[A-Z]+).*",dataframe$column)] <- ""
我仍然得到像这样的行....... "! last entry ..... 25.08.2014..."
期望的输出:
"424343 Amsterdam center"
"343423 London 42 ......"
"3434 Prague ........."
"343345 Bratislava ...."
""
""
...
...
答案 0 :(得分:2)
您可以查看以至少一个数字开头的字符串,并获取所有不匹配的结果(使用!
),例如:
!grepl("^[[:digit:]]+", text)
在你的例子中:
dataframe$column[!grepl("^[[:digit:]]+",dataframe$column)] <- ""
答案 1 :(得分:2)
这是我构建我怀疑为OP造成问题的策略:
> inp <- scan(what="")
1: "424343 Amsterdam center"
2: "343423 London 42 ......"
3: "3434 Prague ........."
4: "343345 Bratislava ...."
5: "! last entry ..... 25.08.2014..."
6: "Berlin"
7:
dat <- data.frame(inp=inp)
我怀疑他看到了什么:
> dat$inp[grepl("(^[A-Z]+).*",dat$inp)] <- ""
Warning message:
In `[<-.factor`(`*tmp*`, grepl("(^[A-Z]+).*", dat$inp), value = c(5L, :
invalid factor level, NA generated
> dat
inp
1 424343 Amsterdam center
2 343423 London 42 ......
3 3434 Prague .........
4 343345 Bratislava ....
5 ! last entry ..... 25.08.2014...
6 <NA>
因此,我在评论中提出的方法是两种可能性之一:
dat <- data.frame(inp=inp, stringsAsFactors=FALSE) # option 1
dat$inp <- as.character(dat$inp) # convert factor to character
然后OP的代码按预期工作:
> dat$inp[grepl("(^[A-Z]+).*",dat$inp)] <- ""
> dat
inp
1 424343 Amsterdam center
2 343423 London 42 ......
3 3434 Prague .........
4 343345 Bratislava ....
5 ! last entry ..... 25.08.2014...
6
答案 2 :(得分:0)
这样的东西?
dataframe$column[grepl("^[^0-9]",dataframe$column)] <- ""