即使table()验证对象是否在数据集中,也出现“找不到对象”错误

时间:2019-09-25 14:57:36

标签: r

我已经阅读了遇到类似问题的其他人,但是我的处境似乎与针对其他问题提出的解决方案不同。我正在尝试使用条件语句重新编码变量。我想将字符串转换为数字,以便将这些观察结果子集化为新的数据框。到目前为止,这是我所拥有的:

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()。我仍然收到相同的错误消息。

1 个答案:

答案 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" ""    ""