String 如何在R中将不同级别的字符串转换为数字响应?
首先,我读了一些类似的问题。我的问题与已经解决的问题非常相似。但是这个细微的差别给我带来了一些问题 在我的问题中,我有一列数据帧,其中包含五个不同级别的字符串:“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。 如果我想实现我的目标,我是否必须手动更改这些字符串的级别顺序 附件: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%”,每个字符串
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"