2017-08-15 16 views
0

如果下面是我的數據框如何在數據框中鏈接多個字符串值更改?

編輯變量名

forces2015 <- data.frame(Country = c("Russian Federation", "Egypt, Arab Rep.", "Iran, Islamic Rep.")) 

現在我想改變一個函數的所有單獨的值,但我只能想到這一個:

編輯欄目名稱:

forces2015$Country <- gsub("Russian Federation", "Russia", forces2015$Country) 
forces2015$Country <- gsub("Egypt, Arab Rep.", "Egypt", forces2015$Country) 
forces2015$Country <- gsub("Iran, Islamic Rep.", "Iran", forces2015$Country) 

我可能有10個這樣的值,那麼如何以最優雅的方式解決這個問題呢?

+0

'stringr :: str_replace_all()' – Masoud

+0

你可以建立一個查找表,將一個映射到另一個,然後用它來填充所需的值。 – lmo

+0

國家/地區名稱是Country或Country.Name? –

回答

3

您可以使用recodedplyr包如下:

forces2015$Country <- recode(forces2015$Country, "Russian Federation" = "Russia", "Egypt, Arab Rep." = "Egypt", "Iran, Islamic Rep." = "Iran") 
+0

好的,不知道重新編碼。 –

+0

是的,謝謝我。雖然只用'tibbles',但很有用。 – Tdebeus

+0

我也不知道'recode()'。很好的答案! –

0

這種方式可將數據框過濾到相關行並快速替換國家/地區值。這有利於單個替換: data$Country[data$Country=="Russian Federation"] <- "Russia"

如果要使用很多條件來代替許多價值,而只使用基本庫函數,我建議使用一系列ifelse()功能:

forces2015$Country <- with(forces2015, 
        ifelse(Country=="Russian Federation","Russia", 
         ifelse(Country=="Egypt, Arab Rep.","Egypt", 
         ifelse(Country=="Iran, Islamic Rep.","Iran", 
          Country)))) 
1

你可以試試qdap包。

c1 <- c('Russian Federation', 'Egypt, Arab Rep.', 'Iran, Islamic Rep.') 
c2 <- c('Russia', 'Egypt', 'Iran') 

library(qdap)  
mgsub(c1,c2, forces2015$Country.Name) 
1

使用dplyr :: case_when ...

library(dplyr) 

forces2015 %>% 
    mutate(Country = case_when(
    Country == "Russian Federation" ~ "Russia", 
    Country == "Egypt, Arab Rep." ~ "Egypt", 
    Country == "Iran, Islamic Rep." ~ "Iran", 
    TRUE ~ Country)) 
+0

謝謝你的作品!從我的問題中複製我的編輯(在您回答後編輯)時,您的代碼看起來有點不同。 – Tdebeus

相關問題