我有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来编写一行代码
提前致谢!
答案 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))