我已经阅读了遇到类似问题的其他人,但是我的处境似乎与针对其他问题提出的解决方案不同。我正在尝试使用条件语句重新编码变量。我想将字符串转换为数字,以便将这些观察结果子集化为新的数据框。到目前为止,这是我所拥有的:
blad_mor <- read.csv("blad_mor.csv", header = T)
str(blad_mor)
blad_mor_recode <- gsub(C670:C679, 29010, blad_mor$cod)
我得到的是str()
命令的输出:
> str(blad_mor)
'data.frame': 127073 obs. of 12 variables:
$ year : int 1999 1999 1999 1999 1999 1999 1999 1999 1999 1999 ...
$ sex : Factor w/ 4 levels "1","2","F","M": 1 1 1 2 1 2 2 2 2 2 ...
$ race : Factor w/ 17 levels "America","Asian &",..: 4 4 4 4 4 4 4 4 4 4 ...
$ county : Factor w/ 79 levels "COUNTY1","COUNTY2",..: 1 1 1 1 1 1 1 1 1 1 ...
$ cod : Factor w/ 327 levels "C001","C005",..: 89 108 108 294 63 42 172 74 85 269 ...
$ fips : int 1 1 1 1 1 1 1 1 1 1 ...
$ state : int 5 5 5 5 5 5 5 5 5 5 ...
$ race_code : int 2 2 2 2 2 2 2 2 2 2 ...
$ ethnicity : Factor w/ 4 levels "","Hispanic",..: 1 1 1 1 1 1 1 1 1 1 ...
$ ethnicity_code: int NA NA NA NA NA NA NA NA NA NA ...
但是当我尝试使用blad_mor_recode <- gsub(C670:C679, 29010, blad_mor$cod)
代码时,会出现此错误:
> blad_mor_recode <- gsub(C670:C679, 29010, blad_mor$cod)
Error in gsub(C670:C679, 29010, blad_mor$cod) : object 'C670' not found
因此,我通过table(blad_mor$cod)
验证了该对象实际上是 ,这是其中的一些输出:
C578 C579 C58 C60 C601 C609 C61 C629 C631 C639 C64 C65 C66 C670 C672 C674 C675 C676
2 43 4 1 1 53 6162 62 1 14 2911 30 47 1 4 1 1 2
C677 C678 C679 C680 C689 C690 C692 C693 C694 C695 C696 C699 C700 C701 C709 C71 C710 C711
1 4 2776 35 77 1 4 5 1 1 8 45 7 3 11 1 29 34
根据此输出,对象'C670'具有一个实例,但是R告诉我它不存在并且不运行命令。我在这里想念什么?我应该将类的类型从factor更改为其他类型吗?我很困惑
编辑:我已经尝试在字符串周围加上引号(例如blad_mor_recode <- gsub('C670:C679', '29010', blad_mor$cod)
以及ifelse()。我仍然收到相同的错误消息。
答案 0 :(得分:1)
如果要将所有字符串从C70
更改为C79
,则必须使用regex
。像下面这样的东西会起作用:
blad_mor_recode <- gsub("C7[0-9]", "29010", blad_mor$cod)
一个简单的例子:
gsub("C7[0-9]","",c("C60","C70","C78"))
[1] "C60" "" ""