将任何单个数字值替换为列中的NA,而不会影响2位数或2位数以上

时间:2017-07-18 08:25:49

标签: r

我有100个观察值和15个变量作为我的数据集,其中一列包含数字和字母。

我想只替换数据点中存在的单个数字

例如:

Donor
345abc
3
0
789edf
101er

预期产出:

Donor
345abc
NA
NA
789edf
101er
dt$column=[dt$column==3]<-NA

dt$column=[dt$column==0]<-NA

我使用上面的行作为临时解决方案,但我重写了这段代码(0 - 9)如何在这种情况下使用regex或gsub来编写一行代码

提前致谢!

3 个答案:

答案 0 :(得分:1)

希望这有帮助!

df$column_name <- with(df, gsub("^\\d$",NA,column_name))

答案 1 :(得分:0)

也许是这样的:

dt$column[nchar(dt$column)==1 & nchar(gsub('[[:digit:]]', '', dt$column))==0]=NA

如果字符串是单个字符,并且在替换数字后,它的长度为零个字符,请将该值替换为NA。

实施例

dt = data.frame(column=c(1,"dog",2,"bike"))
dt$column  = as.character(dt$column)

  column
1      1
2    dog
3      2
4   bike

变为

  column
1   <NA>
2    dog
3   <NA>
4   bike

希望这有帮助!

  

编辑:基于评论的示例2

> dt
  column
1 3.1dog
2  5bike
3      1
4      2
5   EL0O

> dt$column[nchar(dt$column)==1 & nchar(gsub('[[:digit:]]', '', dt$column))==0]=NA

> dt
  column
1 3.1dog
2  5bike
3   <NA>
4   <NA>
5   EL0O

答案 2 :(得分:0)

我们可以转换&#39;列&#39;到numeric,获取非NA值的索引并将其分配给NA

dt$column[!is.na(as.numeric(dt$column)) &  nchar(dt$column)==1] <- NA
dt  
#   column
#1 345abc
#2   <NA>
#3   <NA>
#4 789edf
#5  101er

数据

dt <- structure(list(column = c("345abc", "3", "0", "789edf", "101er"
 )), .Names = "column", class = "data.frame", row.names = c(NA, 
-5L))