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

时间:2016-04-27 14:53:48

标签: r replace gsub

我在数据框中有几个单元格,后面跟一个星号。我想用*和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 ==“*”]&lt; -NA但只替换了只包含*

的单元格

3 个答案:

答案 0 :(得分:6)

尝试胁迫数字:

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。

答案 1 :(得分:2)

我们也可以使用

df.groupby(level=1).cumprod() \
  .groupby(level=1).shift() \
  .groupby(level=1).fillna(method='bfill')

答案 2 :(得分:1)

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