如何将数据框列转换为数字类型?

如何将数据框列转换为数字类型?

如何将数据框列转换为数字类型?



沧海一幻觉
浏览 2189回答 3
3回答

jeck猫

由于(仍然)没有人得到复选标记,我认为你有一些实际问题,主要是因为你没有指定你想要转换成什么类型的矢量numeric。我建议你应该应用transform函数来完成你的任务。现在我要证明某些“转换异常”:# create dummy data.framed <- data.frame(char = letters[1:5],&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fake_char = as.character(1:5),&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fac = factor(1:5),&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; char_fac = factor(letters[1:5]),&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; num = 1:5, stringsAsFactors = FALSE)让我们一瞥 data.frame> d&nbsp; char fake_char fac char_fac num1&nbsp; &nbsp; a&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1&nbsp; &nbsp;1&nbsp; &nbsp; &nbsp; &nbsp; a&nbsp; &nbsp;12&nbsp; &nbsp; b&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2&nbsp; &nbsp;2&nbsp; &nbsp; &nbsp; &nbsp; b&nbsp; &nbsp;23&nbsp; &nbsp; c&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3&nbsp; &nbsp;3&nbsp; &nbsp; &nbsp; &nbsp; c&nbsp; &nbsp;34&nbsp; &nbsp; d&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;4&nbsp; &nbsp;4&nbsp; &nbsp; &nbsp; &nbsp; d&nbsp; &nbsp;45&nbsp; &nbsp; e&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5&nbsp; &nbsp;5&nbsp; &nbsp; &nbsp; &nbsp; e&nbsp; &nbsp;5让我们运行:> sapply(d, mode)&nbsp; &nbsp; &nbsp; &nbsp;char&nbsp; &nbsp;fake_char&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;fac&nbsp; &nbsp; char_fac&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;num&nbsp;"character" "character"&nbsp; &nbsp;"numeric"&nbsp; &nbsp;"numeric"&nbsp; &nbsp;"numeric"&nbsp;> sapply(d, class)&nbsp; &nbsp; &nbsp; &nbsp;char&nbsp; &nbsp;fake_char&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;fac&nbsp; &nbsp; char_fac&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;num&nbsp;"character" "character"&nbsp; &nbsp; "factor"&nbsp; &nbsp; "factor"&nbsp; &nbsp;"integer"&nbsp;现在你可能会问自己“哪里有异常?” 嗯,我碰到了很奇特的事情R,这是不是在最混杂的东西,但它可以迷惑你,特别是如果你滚进睡前阅读。这里是:前两列是character。我故意打电话给第二个fake_char。找出这个character变量与Dirk在他的回复中创建的变量的相似性。它实际上是一个numerical转换为的向量character。3 次和4 次的列是factor,最后一个是“纯粹的” numeric。如果使用transform函数,则可以转换fake_char为变量本身numeric,而不是char变量本身。> transform(d, char = as.numeric(char))&nbsp; char fake_char fac char_fac num1&nbsp; &nbsp;NA&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1&nbsp; &nbsp;1&nbsp; &nbsp; &nbsp; &nbsp; a&nbsp; &nbsp;12&nbsp; &nbsp;NA&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2&nbsp; &nbsp;2&nbsp; &nbsp; &nbsp; &nbsp; b&nbsp; &nbsp;23&nbsp; &nbsp;NA&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3&nbsp; &nbsp;3&nbsp; &nbsp; &nbsp; &nbsp; c&nbsp; &nbsp;34&nbsp; &nbsp;NA&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;4&nbsp; &nbsp;4&nbsp; &nbsp; &nbsp; &nbsp; d&nbsp; &nbsp;45&nbsp; &nbsp;NA&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5&nbsp; &nbsp;5&nbsp; &nbsp; &nbsp; &nbsp; e&nbsp; &nbsp;5Warning message:In eval(expr, envir, enclos) : NAs introduced by coercion但如果你在做同样的事情,fake_char和char_fac,你会很幸运,并摆脱无NA的:> transform(d, fake_char = as.numeric(fake_char),&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;char_fac = as.numeric(char_fac))&nbsp; char fake_char fac char_fac num1&nbsp; &nbsp; a&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1&nbsp; &nbsp;1&nbsp; &nbsp; &nbsp; &nbsp; 1&nbsp; &nbsp;12&nbsp; &nbsp; b&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2&nbsp; &nbsp;2&nbsp; &nbsp; &nbsp; &nbsp; 2&nbsp; &nbsp;23&nbsp; &nbsp; c&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3&nbsp; &nbsp;3&nbsp; &nbsp; &nbsp; &nbsp; 3&nbsp; &nbsp;34&nbsp; &nbsp; d&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;4&nbsp; &nbsp;4&nbsp; &nbsp; &nbsp; &nbsp; 4&nbsp; &nbsp;45&nbsp; &nbsp; e&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5&nbsp; &nbsp;5&nbsp; &nbsp; &nbsp; &nbsp; 5&nbsp; &nbsp;5如果您保存已转换data.frame并检查mode并且class,您将获得:> D <- transform(d, fake_char = as.numeric(fake_char),&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; char_fac = as.numeric(char_fac))> sapply(D, mode)&nbsp; &nbsp; &nbsp; &nbsp;char&nbsp; &nbsp;fake_char&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;fac&nbsp; &nbsp; char_fac&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;num&nbsp;"character"&nbsp; &nbsp;"numeric"&nbsp; &nbsp;"numeric"&nbsp; &nbsp;"numeric"&nbsp; &nbsp;"numeric"&nbsp;> sapply(D, class)&nbsp; &nbsp; &nbsp; &nbsp;char&nbsp; &nbsp;fake_char&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;fac&nbsp; &nbsp; char_fac&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;num&nbsp;"character"&nbsp; &nbsp;"numeric"&nbsp; &nbsp; "factor"&nbsp; &nbsp;"numeric"&nbsp; &nbsp;"integer"因此,结论是:是的,您可以将character矢量转换为numeric一个,但numeric前提是它的元素是“可转换”的。如果character向量中只有一个元素,那么在尝试将该向量转换为numerical1 时会出错。只是为了证明我的观点:> err <- c(1, "b", 3, 4, "e")> mode(err)[1] "character"> class(err)[1] "character"> char <- as.numeric(err)Warning message:NAs introduced by coercion&nbsp;> char[1]&nbsp; 1 NA&nbsp; 3&nbsp; 4 NA现在,只是为了好玩(或练习),尝试猜测这些命令的输出:> fac <- as.factor(err)> fac???> num <- as.numeric(fac)> num???亲切的问候帕特里克伯恩斯!=)

跃然一笑

对我有帮助的东西:如果要转换的变量范围(或者只有一个变量),你可以使用sapply。有点荒谬,但仅举例如:data(cars)cars[,&nbsp;1:2]&nbsp;<-&nbsp;sapply(cars[,&nbsp;1:2],&nbsp;as.factor)假设数据帧的第3,6-15和37列需要转换为数字,可以:dat[,&nbsp;c(3,6:15,37)]&nbsp;<-&nbsp;sapply(dat[,&nbsp;c(3,6:15,37)],&nbsp;as.numeric)

LEATH

如果x是dataframe的列名dat,并且x是因子类型,请使用:as.numeric(as.character(dat$x))
打开App,查看更多内容
随时随地看视频慕课网APP