R中的替代价值问题
我试图替换数据集中某个变量的一些值,但我一直得到一个意外值414,而不是9。我已经检查过代码很多次了,但就是不能让它工作 我的代码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
#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)