2012-10-08 54 views
2

我是一個新的R用戶,在嘗試重新命名列中的某些記錄時遇到了一些困難。如何修復在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) 

我的問題似乎是與「其他」方面:代碼運行正常,並且預期收益「OCALYOY」,但classcode的其他值現在已經轉換爲數字(儘管當我查看該字段的模式時,它仍然返回爲「字符」)。

我在做什麼錯? 非常感謝!

+1

它對我來說工作得很好。我懷疑看'str(data)'會告訴你更多關於這個行爲的信息。 – Maiasaura

回答

0

您可以使其他部分as.character(data$classcode)ifelse關於參數的類有一些奇怪的語義,它將你的因素轉化爲它的基礎數字表示。 as.character會將其保留爲字符值。

+0

謝謝 - 我已經試過了,但後來它只是返回TRUE爲類代碼的每個值...我欣賞快速回復! – user1729954

+0

劃痕 - 這是我正在使用的is.character()。 As.character像魅力一樣工作。非常感謝! – user1729954

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" 

如果不是它,你可以讓你的問題reproducible加入的dput()輸出到你的問題,而不是文本的代表性?

+0

謝謝 - 修復它。對不起,關於文字表示...仍然試圖找出如何發佈。下次我會使用dput()。 – user1729954

相關問題