如果一个单元格包含某个字符替换 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
我在一个数据框中有几个单元格包含一个数字后跟一个星号。我想用带有 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