使用 if 函数将数据框中的字符更改为数字

Changing characters in a data frame to numeric with if-function

例如,我有这个数据框,我想将字符更改为数字:

x<-c("a","b","c","a","a","a","c","b","b","a","c","a","b","b","c")
y<-rnorm(15)
z<-rnorm(15)
data<-data.frame(x,y,z)

我是这样知道的:

data$x<-factor(data$x,levels = c("a","b","c"),labels = c(1,2,3))

但是如果我有更多的角色,那将需要很多时间。我想了解如何使用 if-function 更改它。

我们可以直接使用

as.numeric(data$x)
#[1] 1 2 3 1 1 1 3 2 2 1 3 1 2 2 3

如果需要在出现unique个元素时进行编码

as.numeric(factor(data$x, levels = unique(data$x)))
#[1] 1 2 3 1 1 1 3 2 2 1 3 1 2 2 3

如果我们可以使用包,data.table 中的 .GRP 会有所帮助

library(data.table)
setDT(data)[, x1 := .GRP , x]

这项工作不依赖于以下因素:

library(dplyr)
data %>% 
  mutate(x = group_indices(.,x))

# A tibble: 15 x 3
       x       y      z
   <int>   <dbl>  <dbl>
 1     1  1.61    0.865
 2     2 -0.424  -0.939
 3     3 -0.773  -0.558
 4     1  0.108   0.336
 5     1 -0.219   1.82