2017-08-14 109 views
0

假設我有一個數據框dfR:如何在數據框中用大寫字母分隔每個單詞的首字母?

> df <- data.frame(Disease = c('Disease Entry1; disease Entry2', 'disease Entry4','disease Entry5; disease entry6'), ID = c(1,2,3)) 
> df 
         Disease ID 
1 Disease Entry1; disease Entry2 1 
2     disease Entry4 2 
3 disease Entry5; disease entry6 3 

我該如何操作它,以便每個疾病條目都是小寫字母,除了每個條目的第一個字母?即

> df 
         Disease ID 
1 Disease entry1; Disease entry2 1 
2     Disease entry4 2 
3 Disease entry5; Disease entry6 3 

我以爲我會採取使用tolower功能的莫名其妙,但如何兼顧分號?

+2

是它總是應該以大寫字母開頭的單詞「疾病」?或者這些單詞可以改變嗎?如果不是,我建議使用'tolower()',然後使用'gsub(「疾病」,「疾病」,df $疾病)' –

+0

應該更清楚@KenS。,'疾病'只是一個佔位符I用於這個例子。它確實在變化。 –

+0

你可以使用'stringr :: str_to_title'來轉換所有的單詞以大寫開頭 –

回答

2

您可以首先將所有的字母爲小寫,然後用gsub使用回參考\\1在BOS或;爲大寫後的字母與\\U轉換一起:

df$Disease <- gsub("(?<=^|;)([a-z])", "\\U\\1", tolower(df$Disease), perl = T) 

df 
#       Disease ID 
#1 Disease entry1; Disease entry2 1 
#2     Disease entry4 2 
#3 Disease entry5; Disease entry6 3 
+1

真棒@Psidom!感謝您的快速回復 –

+0

只是爲了澄清,BOS代表什麼? –

+1

*開始字符串*。作爲錨點'^'表示。 – Psidom

相關問題