将数据框列从字符转换为数字

时间:2016-06-08 15:39:10

标签: r

我有一个我构建的数据框:

> yyz <- data.frame(a = c("1","2","n/a"), b = c(1,2,"n/a"))

> apply(yyz, 2, class)
      a           b 
"character" "character"

我正在尝试将最后一列转换为数字,同时仍将第一列保留为字符。我试过这个:

> yyz$b <- as.numeric(as.character(yyz$b))
> yyz
  a  b
  1  1
  2  2
  n/a NA

但是当我运行apply类时,它告诉我它们都是字符类。

> apply(yyz, 2, class)
      a           b 
"character" "character"

我设置错误的数据框了吗?或者它是R解释数据框的方式吗?

1 个答案:

答案 0 :(得分:34)

如果我们只需要一列numeric

yyz$b <- as.numeric(as.character(yyz$b))

但是,如果所有列都需要更改为numeric,请使用lapply循环列并转换为numeric,方法是先将其转换为character类,列是factor

yyz[] <- lapply(yyz, function(x) as.numeric(as.character(x)))

由于字符串factor,OP帖子中的两列都是"n/a"。使用na.strings = "n/a"中的read.table/read.csv阅读文件时可以轻松避免这种情况,或者如果我们使用data.frame,我们可以characterstringsAsFactors=FALSE(默认值为stringsAsFactors=TRUE

关于apply的使用,它将数据集转换为matrix,而matrix只能容纳一个类。要查看class,我们需要

lapply(yyz, class)

或者

sapply(yyz, class)

或检查

str(yyz)