假设我有这个df
df = data.frame(x = c('1E','1E','2F','2F','3F','3E','4E'), y = LETTERS[1:7] )
第一列(x)是字符类型,我只想在保持相同变量的情况下将其类型更改为数字(这意味着变量x仍然是字母,但其类型将变为数字)。
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
46scxncf2#
您可能正在寻找factor。
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"
fcwjkofz3#
我们可以使用str_extract和正则表达式[0-9+]:
str_extract
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
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
4条答案
按热度按时间z8dt9xmd1#
我们可以用
46scxncf2#
您可能正在寻找
factor
。其中
fcwjkofz3#
我们可以使用
str_extract
和正则表达式[0-9+]:u3r8eeie4#
你可能需要创建一个新的ID列,用唯一的值重新编码x。2一个很好的方法是先转换为因子,然后再转换为数字。3这将创建一个新的数字ID。