String 如何在R中将不同级别的字符串转换为数字响应?

String 如何在R中将不同级别的字符串转换为数字响应?,string,r,String,R,首先,我读了一些类似的问题。我的问题与已经解决的问题非常相似。但是这个细微的差别给我带来了一些问题 在我的问题中,我有一列数据帧,其中包含五个不同级别的字符串:“10-20%”、“100+%”、“21-40%”、“41-70%”、“71-100%”。我已经尝试了这两个函数,as.numeric和as.integer。这两个函数确实将字符串更改为数字响应。问题是我想按照数字顺序转换这些字符串。例如,“10-20%”、“100+%”、“21-40%”、“41-70%”、“71-100%”,每个字符串

首先,我读了一些类似的问题。我的问题与已经解决的问题非常相似。但是这个细微的差别给我带来了一些问题

在我的问题中,我有一列数据帧,其中包含五个不同级别的字符串:“10-20%”、“100+%”、“21-40%”、“41-70%”、“71-100%”。我已经尝试了这两个函数,as.numeric和as.integer。这两个函数确实将字符串更改为数字响应。问题是我想按照数字顺序转换这些字符串。例如,“10-20%”、“100+%”、“21-40%”、“41-70%”、“71-100%”,每个字符串对应的字符串是1,2,3,4,5

但我想要的是“10-20%”是1,“21-40%”是2,“41-70%”是3,“71-100%”是4,“100+%”是5。 如果我想实现我的目标,我是否必须手动更改这些字符串的级别顺序

附件:

levels(dataset$PercentGrowth)
[1] ""        "10-20%"  "100+%"   "21-40%"  "41-70%"  "71-100%"

head(as.integer(dataset$PercentGrowth))
[1] 1 4 3 1 3 4

head(as.numeric(dataset$PercentGrowth))
[1] 1 4 3 1 3 4

head((dataset$PercentGrowth))
[1]        21-40% 100+%         100+%  21-40%
Levels:  10-20% 100+% 21-40% 41-70% 71-100%
样本数据会有所帮助


编辑以添加级别。

您应该从字符串中创建一个因子,以良好的顺序分配级别:

x = c("10-20%", "100+%" ,"21-40%" ,"41-70%", "71-100%")
as.integer(factor(x,levels=x))

[1] 1 2 3 4 5
你可以尝试:

x <- c("10-20%", "100+%" ,"21-40%" ,"41-70%", "21-40%", "71-100%", "10-20%")
library(gtools)
match(x,unique(mixedsort(x)))
#[1] 1 5 2 3 2 4 1

##
as.numeric(factor(x, levels=unique(mixedsort(x))))
#[1] 1 5 2 3 2 4 1

<代码> X感谢发帖,请考虑用一些代码编辑这些功能。谢谢您的提醒。我会更新的。你的代码帮了我很多。特别是对于函数mixedsort,它可以对嵌入数字的字符串进行排序。顺便问一下,您是否知道任何其他函数可以对字符串进行排序,例如“少于一年”、“一年”、“超过一年”?您好“user3757135”,我不知道有任何函数可以对字符串进行排序。一种方法是,如果没有那么多唯一的字符串,则在?factor()中手动指定级别。另一种方法是将字母字符串更改为混合字符串并执行?混合顺序。请检查编辑。嗨,akrun,谢谢你的评论。它帮助了我!但在后面的部分,我想我会手动完成。谢谢=)
x <- c("10-20%", "100+%" ,"21-40%" ,"41-70%", "21-40%", "71-100%", "10-20%")
library(gtools)
match(x,unique(mixedsort(x)))
#[1] 1 5 2 3 2 4 1

##
as.numeric(factor(x, levels=unique(mixedsort(x))))
#[1] 1 5 2 3 2 4 1
x1 <- c("less than one year", "one year", "more than one year","one year", "less than one year")
gsub2 <- function(pattern, replacement, x, ...) {
for(i in 1:length(pattern))
x <- gsub(pattern[i], replacement[i], x, ...)
x
}

x1[mixedorder(gsub2(c("less","^one","more"), c(0,1,2), x1))]
[1] "less than one year" "less than one year" "one year"          
[4] "one year"           "more than one year"