用R中的整数替换数据框列中的字符串

时间:2013-10-17 21:14:50

标签: r

我有一个名为'foo'的数据框:

 foo <- data.frame("row1" = c(1,2,3,4,5), "row2" = c(1,2.01,3,"-","-"))

'foo'作为CSV文件从其他程序上传,有两列。一个是数字数据类型,另一个是因子数据类型。

str(foo)
'data.frame':   5 obs. of  2 variables:
$ row1: num  1 2 3 4 5
$ row2: Factor w/ 4 levels "-","1","2.01",..: 2 3 4 1 1

注意有破折号,例如“ - ”,在foo $ row2中,这会导致此列成为一个因素。我想用零替换短划线,这样data.class(foo $ row2)将返回'numeric'。我们的想法是替换每列中的所有破折号,以便我可以使用R对其进行数字分析。

在R中执行此操作的最简单方法是什么?

谢谢,

4 个答案:

答案 0 :(得分:2)

这是一种简单的方法。可能有一种更优雅的方式,但这可行:

> foo <- data.frame("row1" = c(1,2,3,4,5), "row2" = c(1,2.01,3,"-","-"))
> levels(foo$row2)[levels(foo$row2)=="-"]<-0
> foo$row2<-as.numeric(as.character(foo$row2))
> class(foo$row2)
[1] "numeric"
> foo
  row1 row2
1    1 1.00
2    2 2.01
3    3 3.00
4    4 0.00
5    5 0.00

答案 1 :(得分:2)

问:我的想法是替换每列中的所有破折号,以便我可以用R对其进行数值分析。

applysapplysub

一起使用
 kk<-data.frame(apply(foo,2,function(x) as.numeric(sub("-",0,x))))
> kk
  row1 row2
1    1 1.00
2    2 2.01
3    3 3.00
4    4 0.00
5    5 0.00

> str(kk$row2)
 num [1:5] 1 2.01 3 0 0

或者,您可以使用sapply

kk<-data.frame(sapply(names(foo),function(x)as.numeric(sub("-",0,foo[,x]))))

更新: 如果您只想要第二个col,则无需使用applyfoo$row2<- as.numeric(sub("-",0,foo[,2]))

答案 2 :(得分:1)

我会使用ifelse()foo$row2 <- ifelse(foo$row2 == "-", 0, as.numeric(foo$row2))

您可能还需要as.character()将因子转换为字符

答案 3 :(得分:1)

gsub ...

怎么样?
as.numeric( gsub("-" , 0 , foo[,2] ) )
#[1] 1.00 2.01 3.00 0.00 0.00