R数据框 - 将大多数数字列中的单词转换为零

时间:2017-07-21 18:16:24

标签: r dataframe

我有一个包含名称列和值列的数据框:

AllowAnonymous

我希望将B列中的字词转换为零,如下所示:

a <- c("Bob","Jane","Susan","Greg")
b <- c(10, "Jane", 14, "Greg")
df = data.frame(a,b)
df
      a    b
1   Bob   10
2  Jane Jane
3 Susan   14
4  Greg Greg

提前致谢!

2 个答案:

答案 0 :(得分:3)

我强迫b加入numeric并将其留在那里。由于b最初是factor,我首先将其强制转移到character

df$b = as.numeric(as.character(df$b))
#Warning message:
#NAs introduced by coercion 
df$b
#[1] 10 NA 14 NA

如果您愿意,可以用NA替换0,但我会保留NA

df$b[is.na(df$b)] = 0
df$b
#[1] 10  0 14  0

当然,您可以使用gsub将非数字字符(\\D+)替换为"0"。请注意,gsub会自动强制转换为character

gsub(pattern = "\\D+", replacement = "0", x = df$b)
#[1] "10" "0"  "14" "0" 

答案 1 :(得分:0)

我不是R专家,但我相信,根据上面的评论,df$b = as.numeric(gsub("[^0-9]", "0", df$b))可以正常工作。

更具体地说,将您的代码更改为:

a <- c("Bob","Jane","Susan","Greg")
b <- c(10, "Jane", 14, "Greg")
df = data.frame(a,b)
df$b = as.numeric(gsub("[^0-9]", "0", df$b))
df

它与您拥有的代码相同,但是使用as.numeric来操纵b向量的新行转换为数字和gsub,这允许您迭代向量并对每个值应用正则表达式(more information)。

gsub的第一个参数是正则表达式 - 在这种情况下,我们使用[^0-9],它将匹配任何非数字值(请记住,如果特殊字符可能在你的号码)。正则表达式可以在这里轻松方便地进行测试:regex101

第二个参数是当正则表达式没有通过时用当前值替换的内容。

第三个参数是迭代的向量。

然后将新向量传递给as.numeric方法。

下面的代码段可以在R-Fiddle上看到,here

同样,我不是R程序员,但我认为这可以回答你的问题。