如何从 R 中的文本值创建分类变量
How to create categorical variables from text values in R
我有一个包含分类变量的数据集 Weather
。该变量有 3 个不同的文本值,即 "Dry"、"Drizzle" 和 "Rain".
我想创建另一个变量,我可以为这些变量分配数值。例如 Dry
将是 1
,Drizzle
将是 2
,Rain
将是 3
。
作为附带信息,weather
变量将用于预测供水系统的堵塞情况,因此我将在某种线性回归模型中使用它。
我们可以转换为factor
,然后强制转换为integer
as.integer(factor(df1$Weather, levels = c("Dry", "Drizzle", "Rain"))
您可以转换为有序因子并为其分配标签:
data <- data.frame(Weather = c("Drizzle", "Rain", "Drizzle", "Rain", "Dry"))
factor(data$Weather, levels = c("Dry", "Drizzle", "Rain"), labels = c(1, 2, 3), ordered=TRUE)
哪个会 return:
[1] 2 3 2 3 1
Levels: 1 < 2 < 3
您可能还想阅读有关在线性回归模型中使用有序因子的信息。
这个问题可能是一个好的开始:
https://stats.stackexchange.com/questions/33413/continuous-dependent-variable-with-ordinal-independent-variable
郑重声明,这也可以完成工作:
match(df1$Weather, c("Dry", "Drizzle", "Rain"))
这比@akrun 的解决方案稍快(无论如何已经非常快):
x <- sample(c("Dry", "Drizzle", "Rain"), 1e6, rep=T)
microbenchmark::microbenchmark(
as.integer(factor(x, levels = c("Dry", "Drizzle", "Rain"))),
match(x, c("Dry", "Drizzle", "Rain"))
)
Unit: milliseconds
expr min lq mean median
14.31158 18.13069 23.19702 20.98414 23.10840
13.30326 16.00538 19.07544 17.59751 19.53679
我有一个包含分类变量的数据集 Weather
。该变量有 3 个不同的文本值,即 "Dry"、"Drizzle" 和 "Rain".
我想创建另一个变量,我可以为这些变量分配数值。例如 Dry
将是 1
,Drizzle
将是 2
,Rain
将是 3
。
作为附带信息,weather
变量将用于预测供水系统的堵塞情况,因此我将在某种线性回归模型中使用它。
我们可以转换为factor
,然后强制转换为integer
as.integer(factor(df1$Weather, levels = c("Dry", "Drizzle", "Rain"))
您可以转换为有序因子并为其分配标签:
data <- data.frame(Weather = c("Drizzle", "Rain", "Drizzle", "Rain", "Dry"))
factor(data$Weather, levels = c("Dry", "Drizzle", "Rain"), labels = c(1, 2, 3), ordered=TRUE)
哪个会 return:
[1] 2 3 2 3 1
Levels: 1 < 2 < 3
您可能还想阅读有关在线性回归模型中使用有序因子的信息。 这个问题可能是一个好的开始: https://stats.stackexchange.com/questions/33413/continuous-dependent-variable-with-ordinal-independent-variable
郑重声明,这也可以完成工作:
match(df1$Weather, c("Dry", "Drizzle", "Rain"))
这比@akrun 的解决方案稍快(无论如何已经非常快):
x <- sample(c("Dry", "Drizzle", "Rain"), 1e6, rep=T)
microbenchmark::microbenchmark(
as.integer(factor(x, levels = c("Dry", "Drizzle", "Rain"))),
match(x, c("Dry", "Drizzle", "Rain"))
)
Unit: milliseconds
expr min lq mean median
14.31158 18.13069 23.19702 20.98414 23.10840
13.30326 16.00538 19.07544 17.59751 19.53679