如果一个单元格包含某个字符替换 r 中的整个单元格

If a cell contains a certain character replace the whole cell in r

我在一个数据框中有几个单元格包含一个数字后跟一个星号。我想用带有 NA 的 * 替换单元格中的数据。这是示例数据

a<-c(1.23,"4.2*", 5,6,"8*")
b<-c(0.01,0.5,"3.687*",9,10)
c<-data.frame(a,b)
c

我试过 c[c=="*"]<-NA 但这只会替换仅包含 *

的单元格

尝试强制转换为数字:

data.frame( a = as.numeric(a), b = as.numeric(b) )

     a     b
1 1.23  0.01
2   NA  0.50
3 5.00    NA
4 6.00  9.00
5   NA 10.00

任何无效的数字都将变为 NA。 OP 首选方法的缺点是,当您似乎应该使用数字时,您最终会得到一个充满因素或字符的 data.frame。

c[apply(c, 1:2, function(i) grepl('\*', i))] <- NA
c
#     a    b
#1 1.23 0.01
#2 <NA>  0.5
#3    5 <NA>
#4    6    9
#5 <NA>   10

我们也可以用

c[] <- lapply(c, function(x) replace(x, grep("[*]", x), NA))
c
#    a    b
#1 1.23 0.01
#2 <NA>  0.5
#3    5 <NA>
#4    6    9
#5 <NA>   10