我有一个大的时间序列数据集,其中数字结果以General
格式存储在MS-Excel
中。我尝试过使用gsub(",", "", dummy )
,但它不起作用。数据集没有任何,
或除小数点之外的任何其他可见特殊字符,R
将datatype
作为character
。值为positive
或negative
,其中有一个NA
,并且所有值都有不同的小数位数。
转换为数字后,如何在不必处理N/As
的情况下进行转换。不过,需要注意的一点是,当转换为数字时,一些值以科学记数法显示,如12.1 e+03
和其他具有四位小数的值。
dummy = c("12.1", "42000", "1.2145", "12.25", N/A, "323.369", "-1.235", "335", "0")
# Convert to numeric
dummy = gsub(",", "", dummy )
dummy = as.numeric(dummy )
错误
Warning message:
NAs introduced by coercion "
将N/A
更改为NA
解决了这个问题:
# N/A to NA
dummy = c("12.1", "42000", "1.2145", "12.25", NA, "323.369", "-1.235", "335")
# Convert to numeric
dummy = gsub(",", "", dummy)
dummy = as.numeric(dummy)
要对整个数据集执行此操作,您可以使用:
# Across columns (for matrices)
data <- apply(data, 2, function(x){
ifelse(x == "N/A", NA, x)
})
# Then convert characters to numeric (for matrices)
data <- apply(data, 2, as.numeric)
# Across columns (for data frames)
data <- lapply(data, function(x){
ifelse(x == "N/A", NA, x)
})
# Then convert characters to numeric (for data frames)
data <- lapply(data, as.numeric)
更新:R中对象类型的*apply
差异——感谢用户20650指出