Изменение символов во фрейме данных на числовые с помощью функции if - PullRequest
0 голосов
/ 27 мая 2019

Например, у меня есть этот фрейм данных, и я хочу изменить символы на числа:

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.

Ответы [ 2 ]

0 голосов
/ 27 мая 2019

Это работает без учета факторов:

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 
0 голосов
/ 27 мая 2019

Мы можем просто использовать

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

Если мы можем использовать пакеты, .GRP из data.table может быть полезным

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