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

24 r

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

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

> apply(yyz, 2, class)
      a           b 
"character" "character"
Run Code Online (Sandbox Code Playgroud)

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

> yyz$b <- as.numeric(as.character(yyz$b))
> yyz
  a  b
  1  1
  2  2
  n/a NA
Run Code Online (Sandbox Code Playgroud)

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

> apply(yyz, 2, class)
      a           b 
"character" "character"
Run Code Online (Sandbox Code Playgroud)

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

akr*_*run 46

如果我们只需要一列 numeric

yyz$b <- as.numeric(as.character(yyz$b))
Run Code Online (Sandbox Code Playgroud)

但是,如果需要更改所有列numeric,请使用lapply循环遍历列并转换为numeric首先将其转换为character类,如列所示factor.

yyz[] <- lapply(yyz, function(x) as.numeric(as.character(x)))
Run Code Online (Sandbox Code Playgroud)

OP帖子中的两列都是factor因为字符串"n/a".这可以很容易地避免在阅读使用该文件na.strings = "n/a"read.table/read.csv,或者如果我们使用data.frame,我们可以character用列stringsAsFactors=FALSE(默认为stringsAsFactors=TRUE)


关于它的用法apply,它将数据集转换为matrix并且matrix只能容纳一个类.要检查class,我们需要

lapply(yyz, class)
Run Code Online (Sandbox Code Playgroud)

要么

sapply(yyz, class)
Run Code Online (Sandbox Code Playgroud)

或检查

str(yyz)
Run Code Online (Sandbox Code Playgroud)