gpt4 book ai didi

R - 从因子到数字或整数错误

转载 作者:行者123 更新时间:2023-12-04 16:22:21 26 4
gpt4 key购买 nike

我在 R 中有一个数据框我从 CSV 文件加载的。其中一个变量称为“金额”,旨在包含正数和负数。

当我查看数据框时,这个变量的数据类型被列为一个因子,我需要它的数字格式(虽然不确定是哪种 - 整数 - 数字,嗯......?)。因此,我尝试将其转换为这两种格式之一,但看到了一些有趣的行为。

初始数据帧:

str(df)

Amount : Factor w/ 11837 levels "","-1","-10",..: 2 2 1664 4 6290 6290 6290 6290 6290 6290 ...

正如我上面提到的,当我尝试将它转换为数字或整数时,我看到了一些奇怪的东西。为了证明这一点,我把这个比较放在一起:
df2 <- data.frame(df$Amount, as.numeric(df$Amount), as.integer(df$Amount))

str(df2)
'data.frame': 2620276 obs. of 3 variables:
$ df.Amount : Factor w/ 11837 levels "","-1","-10",..: 2 2 1664 4 6290 6290 6290 6290 6290 6290 ...
$ as.numeric.df.Amount.: num 2 2 1664 4 6290 ...
$ as.integer.df.Amount.: int 2 2 1664 4 6290 6290 6290 6290 6290 6290 ...

> head(df2, 20)
df.Amount as.numeric.df.Amount. as.integer.df.Amount.
1 -1 2 2
2 -1 2 2
3 -201 1664 1664
4 -100 4 4
5 1 6290 6290
6 1 6290 6290
7 1 6290 6290
8 1 6290 6290
9 1 6290 6290
10 1 6290 6290
11 1 6290 6290
12 1 6290 6290
13 1 6290 6290
14 1 6290 6290
15 1 6290 6290
16 1 6290 6290
17 1 6290 6290
18 2 7520 7520
19 2 7520 7520
20 2 7520 7520
as.numericas.integer函数正在使用 Amount 变量并对它做一些事情,但我不知道那是什么。我的目标是将 Amount 变量转换为某种数字数据类型,以便我可以对其执行 sum/mean/etc。

我做错了什么导致了奇怪的数字,我该怎么做才能解决它?

最佳答案

问题的根源可能是您导入的 csv 中的一些时髦值。如果它来自excel,这并不少见。它可以是百分比符号、excel 中的“注释”字符或一长串内容中的任何一个。我会在您选择的编辑器中查看 csv,看看您能看到什么。

除此之外,您还有几个选择。
read.csv接受一个可选参数 stringsAsFactors您可以设置为 FALSE
因子存储为映射到值的整数级别。当您直接使用 as.numeric 进行转换时您最终会得到这些整数级别而不是初始值:

> x<-10:20
> as.numeric(factor(x))
[1] 1 2 3 4 5 6 7 8 9 10 11
>

否则看 ?factor :

In particular, as.numeric applied to a factor is meaningless, and may happen by implicit coercion. To transform a factor f to approximately its original numeric values, as.numeric(levels(f))[f] is recommended and slightly more efficient than as.numeric(as.character(f)).



但是,我怀疑这会出错,因为输入中除了数字之外还有其他内容。

关于R - 从因子到数字或整数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9101939/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com