我有一个这样构造的数据框:
> 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(yyz, 2, class)
a b
"character" "character"
我是否设置了错误的数据框?或者这是 R 解释数据框的方式?
如果我们只需要一列numeric
yyz$b <- as.numeric(as.character(yyz$b))
但是,如果所有列都需要更改为numeric
, use lapply
遍历列并转换为numeric
首先将其转换为character
类与列一样factor
.
yyz[] <- lapply(yyz, function(x) as.numeric(as.character(x)))
OP 帖子中的两列都是factor
因为字符串"n/a"
。使用读取文件时可以轻松避免这种情况na.strings = "n/a"
in the read.table/read.csv
或者如果我们正在使用data.frame
, 我们可以有character
列与stringsAsFactors=FALSE
(默认是stringsAsFactors=TRUE
)
关于使用apply
,它将数据集转换为matrix
and matrix
只能举办一个班级。要检查class
, 我们需要
lapply(yyz, class)
Or
sapply(yyz, class)
Or check
str(yyz)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)