as.numeric 将实际值更改为数据,这本来是一个因素。
as.numeric changes the actual values as data which is originally a factor.
当我将 as.numeric 和 as.integer 应用于列时,它会更改值。为什么是这样?例如:
test <- data.frame(structure(c("52053,34", "79032,83", "20679,06", "20799,56", "20679,06",
"21279,45", "51789,44", "54189,45", "73138,89", "73138,89"), .Dim = c(10L,
1L)))
names(test)[names(test) == "structure.c..52053.34....79032.83....20679.06....20799.56....20679.06..."] <- "column"
test$b <- as.numeric(test$column)
test$c <- as.integer(test$column)
test$column
是一个因素。
class(test$column)
## [1] "factor"
levels(test$column)
显示因子水平的标签。
levels(test$column)
## [1] "20679,06" "20799,56" "21279,45" "51789,44" "52053,34" "54189,45" "73138,89"
## [8] "79032,83"
实际数据值为整数:5、8、1等
unclass(test$column)
## [1] 5 8 1 2 1 3 4 6 7 7
## attr(,"levels")
## [1] "20679,06" "20799,56" "21279,45" "51789,44" "52053,34" "54189,45" "73138,89"
## [8] "79032,83"
test$column
的第一个元素用整数5表示,因为它是第5层。查看级别向量,我们看到第 5 级的标签是
levels(test$column)[5]
## [1] "52053,34"
一般来说,我们想要获取每个对应元素的标签并将它们中的每一个转换为数字:
as.numeric(sub(",", ".", levels(test$column))[test$column])
## [1] 52053.34 79032.83 20679.06 20799.56 20679.06 21279.45 51789.44 54189.45
## [9] 73138.89 73138.89
或者试试这个较短的版本:
as.numeric(sub(",", ".", test$column))
## [1] 52053.34 79032.83 20679.06 20799.56 20679.06 21279.45 51789.44 54189.45
## [9] 73138.89 73138.89
如果数字首先使用小数点表示(而不是逗号),那么在 x 是这样一个因子的情况下就足够了:
as.numeric(as.character(x))
当我将 as.numeric 和 as.integer 应用于列时,它会更改值。为什么是这样?例如:
test <- data.frame(structure(c("52053,34", "79032,83", "20679,06", "20799,56", "20679,06",
"21279,45", "51789,44", "54189,45", "73138,89", "73138,89"), .Dim = c(10L,
1L)))
names(test)[names(test) == "structure.c..52053.34....79032.83....20679.06....20799.56....20679.06..."] <- "column"
test$b <- as.numeric(test$column)
test$c <- as.integer(test$column)
test$column
是一个因素。
class(test$column)
## [1] "factor"
levels(test$column)
显示因子水平的标签。
levels(test$column)
## [1] "20679,06" "20799,56" "21279,45" "51789,44" "52053,34" "54189,45" "73138,89"
## [8] "79032,83"
实际数据值为整数:5、8、1等
unclass(test$column)
## [1] 5 8 1 2 1 3 4 6 7 7
## attr(,"levels")
## [1] "20679,06" "20799,56" "21279,45" "51789,44" "52053,34" "54189,45" "73138,89"
## [8] "79032,83"
test$column
的第一个元素用整数5表示,因为它是第5层。查看级别向量,我们看到第 5 级的标签是
levels(test$column)[5]
## [1] "52053,34"
一般来说,我们想要获取每个对应元素的标签并将它们中的每一个转换为数字:
as.numeric(sub(",", ".", levels(test$column))[test$column])
## [1] 52053.34 79032.83 20679.06 20799.56 20679.06 21279.45 51789.44 54189.45
## [9] 73138.89 73138.89
或者试试这个较短的版本:
as.numeric(sub(",", ".", test$column))
## [1] 52053.34 79032.83 20679.06 20799.56 20679.06 21279.45 51789.44 54189.45
## [9] 73138.89 73138.89
如果数字首先使用小数点表示(而不是逗号),那么在 x 是这样一个因子的情况下就足够了:
as.numeric(as.character(x))