R中的替代价值问题

R中的替代价值问题,r,data-transform,R,Data Transform,我试图替换数据集中某个变量的一些值,但我一直得到一个意外值414,而不是9。我已经检查过代码很多次了,但就是不能让它工作 我的代码 #replace tumor_size with dummy variable Bcdata$Tumor_size=gsub('0-4',1,Bcdata$Tumor_size) Bcdata$Tumor_size=gsub('5-9',2,Bcdata$Tumor_size) Bcdata$Tumor_size=gsub('10-14',3,Bcdata$Tum

我试图替换数据集中某个变量的一些值,但我一直得到一个意外值414,而不是9。我已经检查过代码很多次了,但就是不能让它工作

我的代码

#replace tumor_size with dummy variable 
Bcdata$Tumor_size=gsub('0-4',1,Bcdata$Tumor_size)
Bcdata$Tumor_size=gsub('5-9',2,Bcdata$Tumor_size)
Bcdata$Tumor_size=gsub('10-14',3,Bcdata$Tumor_size)
Bcdata$Tumor_size=gsub('15-19',4,Bcdata$Tumor_size)
Bcdata$Tumor_size=gsub('20-24',5,Bcdata$Tumor_size)
Bcdata$Tumor_size=gsub('25-29',6,Bcdata$Tumor_size)
Bcdata$Tumor_size=gsub('30-34',7,Bcdata$Tumor_size)
Bcdata$Tumor_size=gsub('35-39',8,Bcdata$Tumor_size)
Bcdata$Tumor_size=gsub('40-44',9,Bcdata$Tumor_size)
Bcdata$Tumor_size=gsub('45-49',10,Bcdata$Tumor_size)
Bcdata$Tumor_size=gsub('50-54',11,Bcdata$Tumor_size)
Bcdata$Tumor_size=gsub('55-59',12,Bcdata$Tumor_size)
运行代码前后的表

> table(Bcdata$Tumor_size)

  0-4 10-14 15-19 20-24 25-29 30-34 35-39 40-44 45-49   5-9 50-54 
    8    28    30    50    54    60    19    22     3     4     8

> table(Bcdata$Tumor_size)

  1  10  11   2   3   4 414   5   6   7   8 
  8   3   8   4  28  30  22  50  54  60  19 
> 
和一个数据样本

> head(Bcdata)
                 Class   Age Menopause Tumor_size Inv_nodes Node_caps Deg_malig Breast Irradiate
1 no-recurrence-events 30-39   premeno      30-34       0-2        no         3   left        no
2 no-recurrence-events 40-49   premeno      20-24       0-2        no         2  right        no
3 no-recurrence-events 40-49   premeno      20-24       0-2        no         2   left        no
4 no-recurrence-events 60-69      ge40      15-19       0-2        no         2  right        no
5 no-recurrence-events 40-49   premeno        0-4       0-2        no         2  right        no
6 no-recurrence-events 60-69      ge40      15-19       0-2        no         2   left        no
> tail(Bcdata)
                Class   Age Menopause Tumor_size Inv_nodes Node_caps Deg_malig Breast Irradiate
281 recurrence-events 50-59      ge40      40-44       6-8       yes         3   left       yes
282 recurrence-events 30-39   premeno      30-34       0-2        no         2   left        no
283 recurrence-events 30-39   premeno      20-24       0-2        no         3   left       yes
284 recurrence-events 60-69      ge40      20-24       0-2        no         1  right        no
285 recurrence-events 40-49      ge40      30-34       3-5        no         3   left        no
286 recurrence-events 50-59      ge40      30-34       3-5        no         3   left        no

我一直试图重写代码来修复它,即使它看起来是正确的,然后将数据重置为原始值并再次运行代码,但同样的事情不断发生。救命

编辑:根据要求,部分和全部dput

> dput(Bcdata$Tumor_size)
structure(c(6L, 4L, 4L, 3L, 1L, 3L, 5L, 4L, 11L, 4L, 1L, 5L, 
2L, 5L, 6L, 6L, 3L, 6L, 6L, 6L, 8L, 3L, 5L, 8L, 7L, 5L, 4L, 5L, 
8L, 6L, 8L, 3L, 2L, 2L, 2L, 6L, 1L, 3L, 2L, 6L, 4L, 5L, 10L, 
2L, 11L, 6L, 5L, 5L, 4L, 4L, 3L, 4L, 3L, 4L, 8L, 8L, 1L, 10L, 
6L, 3L, 4L, 2L, 1L, 7L, 5L, 2L, 5L, 4L, 7L, 11L, 2L, 5L, 4L, 
3L, 10L, 2L, 2L, 5L, 5L, 5L, 2L, 2L, 3L, 3L, 4L, 7L, 5L, 1L, 
4L, 8L, 1L, 4L, 5L, 4L, 2L, 6L, 6L, 3L, 6L, 5L, 4L, 6L, 5L, 4L, 
2L, 6L, 4L, 8L, 6L, 6L, 5L, 3L, 4L, 2L, 7L, 4L, 3L, 4L, 2L, 3L, 
4L, 3L, 8L, 6L, 2L, 2L, 6L, 5L, 5L, 7L, 7L, 8L, 6L, 8L, 6L, 4L, 
8L, 10L, 8L, 6L, 8L, 4L, 2L, 9L, 9L, 5L, 11L, 6L, 4L, 6L, 5L, 
6L, 7L, 3L, 3L, 8L, 5L, 6L, 6L, 7L, 5L, 6L, 2L, 5L, 5L, 4L, 4L, 
8L, 2L, 6L, 4L, 3L, 6L, 4L, 5L, 6L, 5L, 2L, 5L, 4L, 7L, 7L, 5L, 
6L, 6L, 4L, 5L, 3L, 2L, 4L, 3L, 5L, 6L, 2L, 11L, 7L, 2L, 2L, 
3L, 5L, 5L, 3L, 8L, 7L, 5L, 1L, 6L, 5L, 6L, 7L, 4L, 4L, 6L, 5L, 
8L, 4L, 4L, 3L, 6L, 3L, 5L, 6L, 5L, 4L, 5L, 4L, 6L, 6L, 8L, 9L, 
11L, 6L, 6L, 3L, 6L, 5L, 5L, 5L, 7L, 4L, 4L, 3L, 5L, 4L, 6L, 
6L, 3L, 6L, 7L, 4L, 5L, 11L, 8L, 11L, 6L, 6L, 6L, 4L, 6L, 6L, 
5L, 5L, 5L, 4L, 4L, 7L, 6L, 4L, 7L, 5L, 6L, 5L, 3L, 6L, 6L, 5L, 
5L, 2L, 7L, 8L, 8L, 6L, 4L, 4L, 6L, 6L), .Label = c("0-4", "10-14", 
"15-19", "20-24", "25-29", "30-34", "35-39", "40-44", "45-49", 
"5-9", "50-54"), class = "factor")

第一个gsub函数将“40-44”更改为“414”,因为它与字符串的中间部分匹配:

Bcdata$Tumor_size=gsub'0-4',1,Bcdata$Tumor_size


您应该使用适当的重新编码函数,或者将其编码为一个因子,然后使用as.numeric将其转换为整数伪值。

如果您想要一个真正快速的解决方案,您可以更改模式以精确匹配:

Bcdata$Tumor_size=gsub('^0-4$',1,Bcdata$Tumor_size)

参考资料:

除非我遗漏了什么,否则你的工作会比你必须的更努力

在您的数据中,肿瘤大小已经是一个因素,其级别顺序正确。因此,使用as.numeric将字符串转换为相应的数字代码

表2.numericBcdata$肿瘤大小 1 2 3 4 5 6 7 8 9 10 11 8 28 30 50 54 60 19 22 3 4 8
您可以复制dputBcdata的输出,或者至少复制dputBcdata$Tumor\u size的输出吗?也许您可以通过这样做来欺骗这件事:Bcdata$Tumor\u size=gsub'40-44','9',Bcdata$Tumor\u size。也许桌子会对角色做出不同的反应,如果你需要在之后改变,很容易就会发生同样的事情。仍然得到414而不是9@StudentWork正如答案所指出的,在您第一次致电gsub时,0-4将被1所取代。一个快速修复方法是运行gsubat last$Tumor_大小已经列为一个因素。您建议使用哪种记录函数?如果它已经是一个因子,您可以尝试forecats::fct_recode反转gsub的顺序来完成这项工作,但这肯定是一种不好的做法。如果它已经是一个因子,并且级别的顺序正确,那么as.numeric会将其转换为整数。
Bcdata$Tumor_size=gsub('^0-4$',1,Bcdata$Tumor_size)