R语言 是否可以将字符类型转换为数字类型,同时保留字符本身?

uoifb46i  于 2023-03-15  发布在  其他
关注(0)|答案(4)|浏览(131)

假设我有这个df

df = data.frame(x = c('1E','1E','2F','2F','3F','3E','4E'),
                y = LETTERS[1:7] )

第一列(x)是字符类型,我只想在保持相同变量的情况下将其类型更改为数字(这意味着变量x仍然是字母,但其类型将变为数字)。

z8dt9xmd

z8dt9xmd1#

我们可以用

library(dplyr)
df %>%
   mutate(x1 = readr::parse_number(x))
  • 输出
x y x1
1 1E A  1
2 1E B  1
3 2F C  2
4 2F D  2
5 3F E  3
6 3E F  3
7 4E G  4
46scxncf

46scxncf2#

您可能正在寻找factor

(df$x <- as.factor(df$x))
# [1] 1E 1E 2F 2F 3F 3E 4E
# Levels: 1E 2F 3E 3F 4E

其中

mode(df$x)
# [1] "numeric"
fcwjkofz

fcwjkofz3#

我们可以使用str_extract和正则表达式[0-9+]:

library(dplyr)
library(stringr)

df %>% 
  mutate(x1 = as.numeric(str_extract(x, '[0-9+]'))) 

 x     y        x1
  <chr> <chr> <dbl>
1 1E    A         1
2 1E    B         1
3 2F    C         2
4 2F    D         2
5 3F    E         3
6 3E    F         3
7 4E    G         4
u3r8eeie

u3r8eeie4#

你可能需要创建一个新的ID列,用唯一的值重新编码x。2一个很好的方法是先转换为因子,然后再转换为数字。3这将创建一个新的数字ID。

library(dplyr)

df %>%
    mutate(new_id = as.numeric(as.factor(x)),
           .after = x)

   x new_id y
1 1E      1 A
2 1E      1 B
3 2F      2 C
4 2F      2 D
5 3F      4 E
6 3E      3 F
7 4E      5 G

相关问题