2017-07-20 53 views
1

我是一名初學者,探索R語言。正在研究data.frame下面,我想反轉Sex矢量值。即'F' - >'M'和'M' - >'F'如何在R語言中反轉Vector中的字符?

sampleData 
     Age Height Sex 
Alex  25 177 F 
Lilly  31 163 F 
Mark  23 190 M 
Oliver 52 179 M 
Martha 76 163 F 
Lucas  49 183 M 
Caroline 26 164 F 

我嘗試了三種方法,但無法達到正確的方法。

  1. 將M替換爲F,反之亦然,但不會影響Vector中的實際值。

    水平(性別)[1] < - 「F」 水平(性別)[2] < - 「M」

  2. 試過下面使用 'mapvalues' 功能,但仍沒有變化。

    庫(plyr) mapvalues(的sampleData $性別,來自= C( 「F」, 「M」),以= C( 「M」, 「F」))

  3. 轉換性別到矩陣和應用'求解',但學會了它只能應用於數字矩陣。

    性別< - as.matrix(性別) 解決(sampleData在$性別)

可能有人請幫助我解決上的字符反轉?!

+1

'df $ Sex < - chartr('FM','MF',df $ Sex)' – Sotos

+2

'factor(df $ Sex,levels = c(「F」,「M 「),labels = c(」M「,」F「))' –

+0

謝謝@Sotos和docendo。兩者都很完美。但是,請問索托斯能否爲我提供關於chartr功能工作的見解?這非常有用。 –

回答

1

您可以簡單地使用像這樣的語句ifelse

爲了簡單起見,我創建了一個類似的數據幀:

sampleData <- data.frame(Age = c(25,31,23,15), Height = c(177,163,190,163), Sex = c("M","F","F","M")) 

然後你就可以使用ifelse

sampleData$Sex <- ifelse(sampleData$Sex=="F","M","F") 
+1

謝謝@洛倫佐它的工作。 :) –

+0

@PradeepVaranasi沒問題!所以現在接受我的答案! ;-) –

1

您也可以編寫一個函數將其轉換:

convertChar <- function(vec){ 
    if(length(unique(vec))!=2) 
     stop("Vector has more or less than 2 unique values") 
    newChar <- ifelse(vec == unique(vec)[1],unique(vec)[2],unique(vec)[1]) 
    return(newChar) 
} 

convertChar(c("M","M","F","F")) 
+0

感謝您回答我的問題。但考慮到LOC和可重用性,上面的答案和評論中的答案很容易。 –