如何修复在R中作为数值返回的字符值?

时间:2012-10-08 21:34:12

标签: r

我是新用户,在尝试重命名列中的某些记录时遇到一些困难。

我的数据包含名为classcode和fish_tl的列。 Classcode是一个字符值,fish_tl是数字。

当classcode ='OCAL'和fish_tl <20时,我需要重命名该类代码的值,使其现在为“OCALYOY”。我不想更改类代码中的任何其他记录。

我正在运行以下代码:

data$classcode<-ifelse(data$classcode=='OCAL'& data$fish_tl<20,
                              'OCALYOY',data$classcode)

我的问题似乎与“else”方面有关:代码运行正常,并按预期返回'OCALYOY',但是类代码的其他值现在已经转换为数字(尽管当我看到它的模式时)字段,它仍然以“字符”的形式返回。)

我做错了什么? 非常感谢!

2 个答案:

答案 0 :(得分:0)

您可以将else部分as.character(data$classcode)ifelse对于参数的类有一些奇怪的语义,它将你的因素转化为它的基础数字表示。 as.character会将其保留为字符值。

答案 1 :(得分:0)

你可能会因为角色问题而被绊倒,尽管你指出R认为它是个性格。无论如何,在代码周围包裹as.character()似乎可以解决我的问题:

> ifelse(data$classcode=='OCAL'& data$fish_tl<20,
+        'OCALYOY',as.character(data$classcode))
#-----
 [1] "BFRE"    "BFRE"    "BFRE"    "HARG"    "OCALYOY" "OYT"     "OYT"     "PFUR"   
 [9] "SPAU"    "BFRE"    "OCALYOY" "OCAL" 

如果不是这样,您可以通过将dput()的输出添加到您的问题而不是文字表示中来提出问题reproducible吗?