Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用gsub删除字符串但不删除数字_R_Gsub - Fatal编程技术网

R 使用gsub删除字符串但不删除数字

R 使用gsub删除字符串但不删除数字,r,gsub,R,Gsub,我有一个像这样的数据框 id col1 1 4 2 - 3 + 4 _ 5 N 6 text-abc 7 50 我的目标是创建一个如下所示的数据帧: id col1 1 4 2 0 3 0 4 0 5 0 6 0 7 50 我希望保持数值的原样,并将“-”、“+”、“uu”、“N”和“文本abc”转换为零。也就是说

我有一个像这样的数据框

 id   col1
  1     4
  2     -
  3     +
  4     _
  5     N
  6     text-abc
  7     50
我的目标是创建一个如下所示的数据帧:

 id   col1
  1     4
  2     0
  3     0
  4     0
  5     0
  6     0
  7     50
我希望保持数值的原样,并将“-”、“+”、“uu”、“N”和“文本abc”转换为零。也就是说,我只希望数值在这个列中,将文本和其他字符串转换为零,并保持数值不变。这是一个很长的列(即数千行),可能包含其他不必要的文本

要修复此问题,我尝试使用以下方法手动执行此操作:

  df$col1 <- gsub("text-abc", 0, df$col1)
  df$col1 <- gsub("+", 0, df$col1)
  df$col1 <- gsub("-", 0, df$col1)
  df$col1 <- gsub("_", 0, df$col1)
  df$col1 <- gsub("N", 0, df$col1)
  df$col1 <- gsub("[^[[:alnum:]]", 0, df$col1)

df$col1我们可以使用
as.numeric
将非数值列更改为
NA
s,然后将那些
NA
转换为0,而不是逐个转换列

df$col1 <- as.numeric(df$col1)

#Use this if `col1` is factor
#df$col1 <- as.numeric(as.character(df$col1))

df$col1[is.na(df$col1)] <- 0

df

#  id col1
#1  1    4
#2  2    0
#3  3    0
#4  4    0
#5  5    0
#6  6    0
#7  7   50

df$col1我们可以使用regex来实现这一点

df$col1[!grepl('^[0-9]+$', df$col1)] <- 0
df$col1 <- as.numeric(df$col1)
df
#  id col1
#1  1    4
#2  2    0
#3  3    0
#4  4    0
#5  5    0
#6  6    0
#7  7   50

df$col1[!grepl(“^[0-9]+$”,df$col1)]愚蠢的我。非常感谢你,Ronak!
df <- structure(list(id = 1:7, col1 = c("4", "-", "+", "_", "N", "text-abc", 
   "50")), class = "data.frame", row.names = c(NA, -7L))