如果 file.csv 使用“;”,则将字符变量转换为数字时出错而不是“,”分隔。 R
Error to transform character variables to numeric if file.csv uses ";" instead of "," seperation. R
我有两个问题,我真的很想找到答案。我试图在所有已经涵盖 "NA Coercion" 问题或如何将因子转换为数字的线程中找到解决方案。不幸的是,他们没有解决我的问题。
提前致谢!
- 为什么 R 将 csv.file 的值检测为因子,而不是数字?
这是 csv.file 第一行的示例:
8248,76;7736,37;7669,27;...;-
只有用“;”分隔的数字以及用“-”表示的两个缺失值。
这就是我将它们加载到 R 中的方式:
gdp <- read.table("gdpcap2.csv", sep = ";")
str(gdp)
'data.frame': 19 obs. of 20 variables:
$ V1 : Factor w/ 19 levels "1058,72","1742,08",..: 17 1 13 15 7 10 8 6 4 2 ...
$ V2 : Factor w/ 19 levels "1012,51","1584,46",..: 17 1 10 14 7 11 8 2 5 3 ...
...
它们加载得很好,但不是数字,而是被检测为因素。
因此,如果我能够将它们作为 "numeric" 加载,我的第二个问题 "How to convert factors to numerics" 也将得到解决。
- 我如何尝试将字符转换为数字:
indx <- sapply(gdp, is.factor)
gdp[indx] <- lapply(gdp[indx], function(x) as.numeric(as.character(x)))
应用后出现以下错误:
There were 20 warnings (use warnings() to see them)
Warning messages:
1: In FUN(X[[i]], ...) : NAs introduced by coercion
2: In FUN(X[[i]], ...) : NAs introduced by coercion
3: In FUN(X[[i]], ...) : NAs introduced by coercion
...
由于强制转换,将 所有 值变为 "NA"。
现在真正让我困惑的是:
我对另一个用“,”而不是“;”分隔的 csv.file 做了完全相同的事情它工作得非常好。运行良好的文件也有缺失值,用“-”表示
csv.file 的一行是这样的:
Angola,-,-,1.7,-,1.7,1.8,...
这里是 R 代码
CPIall <- read.csv("CPI csv.csv")
str(CPIchar)
'data.frame': 19 obs. of 20 variables:
$ 1998: Factor w/ 58 levels "-","1.4","1.5",..: 16 14 25 44 8 38 1 9 21 17 ...
$ 1999: Factor w/ 58 levels "-","1.5","1.6",..: 16 12 26 45 15 35 1 11 25 18 ...
...
indx <- sapply(CPIchar, is.factor)
CPIchar[indx] <- lapply(CPIchar[indx], function(x) as.numeric(as.character(x)))
使用这个csv.file,我也收到了警告消息,但它只是将缺失值“-”更改为"NA",这完全没问题。实数值全部成功转为数值
还应该提到的是,我使用了 "stringsAsFactors = FALSE"
,这确实将值更改为字符。但是当我尝试将字符转换为数字时,我遇到了同样的问题。在我看来,这两个 csv.file 仅在它们的分隔 (, 和 ;) 方面有所不同。最初第一个 csv.file 不起作用,也包含国家名称,但我删除了它们,只是为了确保它们不是魔鬼的根源...
如有任何帮助,我将不胜感激!
很遗憾,我无法发表评论,但我想您只需要在加载数据时使用 dec="," 即可让 R 识别小数参数。
我有两个问题,我真的很想找到答案。我试图在所有已经涵盖 "NA Coercion" 问题或如何将因子转换为数字的线程中找到解决方案。不幸的是,他们没有解决我的问题。
提前致谢!
- 为什么 R 将 csv.file 的值检测为因子,而不是数字? 这是 csv.file 第一行的示例:
8248,76;7736,37;7669,27;...;-
只有用“;”分隔的数字以及用“-”表示的两个缺失值。
这就是我将它们加载到 R 中的方式:
gdp <- read.table("gdpcap2.csv", sep = ";")
str(gdp)
'data.frame': 19 obs. of 20 variables:
$ V1 : Factor w/ 19 levels "1058,72","1742,08",..: 17 1 13 15 7 10 8 6 4 2 ...
$ V2 : Factor w/ 19 levels "1012,51","1584,46",..: 17 1 10 14 7 11 8 2 5 3 ...
...
它们加载得很好,但不是数字,而是被检测为因素。 因此,如果我能够将它们作为 "numeric" 加载,我的第二个问题 "How to convert factors to numerics" 也将得到解决。
- 我如何尝试将字符转换为数字:
indx <- sapply(gdp, is.factor)
gdp[indx] <- lapply(gdp[indx], function(x) as.numeric(as.character(x)))
应用后出现以下错误:
There were 20 warnings (use warnings() to see them)
Warning messages:
1: In FUN(X[[i]], ...) : NAs introduced by coercion
2: In FUN(X[[i]], ...) : NAs introduced by coercion
3: In FUN(X[[i]], ...) : NAs introduced by coercion
...
由于强制转换,将 所有 值变为 "NA"。
现在真正让我困惑的是:
我对另一个用“,”而不是“;”分隔的 csv.file 做了完全相同的事情它工作得非常好。运行良好的文件也有缺失值,用“-”表示
csv.file 的一行是这样的:
Angola,-,-,1.7,-,1.7,1.8,...
这里是 R 代码
CPIall <- read.csv("CPI csv.csv")
str(CPIchar)
'data.frame': 19 obs. of 20 variables:
$ 1998: Factor w/ 58 levels "-","1.4","1.5",..: 16 14 25 44 8 38 1 9 21 17 ...
$ 1999: Factor w/ 58 levels "-","1.5","1.6",..: 16 12 26 45 15 35 1 11 25 18 ...
...
indx <- sapply(CPIchar, is.factor)
CPIchar[indx] <- lapply(CPIchar[indx], function(x) as.numeric(as.character(x)))
使用这个csv.file,我也收到了警告消息,但它只是将缺失值“-”更改为"NA",这完全没问题。实数值全部成功转为数值
还应该提到的是,我使用了 "stringsAsFactors = FALSE"
,这确实将值更改为字符。但是当我尝试将字符转换为数字时,我遇到了同样的问题。在我看来,这两个 csv.file 仅在它们的分隔 (, 和 ;) 方面有所不同。最初第一个 csv.file 不起作用,也包含国家名称,但我删除了它们,只是为了确保它们不是魔鬼的根源...
如有任何帮助,我将不胜感激!
很遗憾,我无法发表评论,但我想您只需要在加载数据时使用 dec="," 即可让 R 识别小数参数。