我在data frame
中有一个因子,其级别为hot
,warm
,tepid
,cold
,very cold
,{{1 }}。我想将它们映射到整数列,其值为freezing
,用于回归,其中一些值映射到同一个值。我希望能够指定显式映射,以便[-2, 2]
个字词映射到very hot
,2
个字符映射到very cold
,等等。如何干净地执行此操作?我想要一个函数,我只是将一些命名列表传递给,或者其他什么。
答案 0 :(得分:13)
假设因子向量x
包含类别。
temperatures <- c("hot", "warm", "tepid", "cold", "very cold", "freezing")
set.seed(1)
x <- as.factor(sample(temperatures, 10, replace=TRUE))
x
[1] warm tepid cold freezing warm freezing freezing cold
[9] cold hot
Levels: cold freezing hot tepid warm
使用映射创建数字向量temp.map
。请注意,“热”和“暖”映射到下面的相同值。
temp.map <- c("hot"=2, "warm"=2, "tepid"=1, "cold"=0, "very cold"=-1, "freezing"=-1)
y <- temp.map[as.character(x)]
y
warm tepid cold freezing warm freezing freezing cold
2 1 0 -1 2 -1 -1 0
cold hot
0 2
答案 1 :(得分:7)
使用as.integer
可以轻松地将因子转换为整数。
例如:
>temperatures <- c("Hot", "Warm", "Tiepid", "Cold", "Very cold", "Freezing")
> set.seed(12345)
> a <- sample(temperatures, 10, r=T)
> a <- factor(a, levels = temperatures)
> a
[1] Very cold Freezing Very cold Freezing Tiepid Hot Warm
[8] Cold Very cold Freezing
Levels: Hot Warm Tiepid Cold Very cold Freezing
> as.integer(a)
[1] 5 6 5 6 3 1 2 4 5 6
如果你需要在[-2; 2]范围内,你只需要
> as.integer(a)-3
[1] 2 3 2 3 0 -2 -1 1 2 3