根据条件语句替换数据框中的值

时间:2018-04-18 05:12:56

标签: r

我的问题与this问题

非常相似
 country                      continent
   <chr>                        <chr>    
 1 Taiwan                       Asia     
 2 New Zealand                  Oceania  
 3 Bulgaria                     Europe   
 4 Bahamas                      Americas 
 5 Serbia                       Europe   
 6 Tajikistan                   Asia     
 7 Southern Sub-Saharan Africa  NA       
 8 Cameroon                     Africa   
 9 Indonesia                    Asia     
10 Democratic Republic of Congo Africa  

我如何使用一个函数/写一个循环,以便当这个国家是&#34;巴哈马&#34;它改变了大陆,现在说南美洲?

我链接的页面是我能找到的最接近的答案,但它与我的问题不同,因为我试图根据不同列中的值操作一列。

我尝试使用ifelse()但是没有用:

gm %>%
  ifelse(country == "Bahamas", continent == "S America", continent)

非常感谢任何见解!

2 个答案:

答案 0 :(得分:1)

您需要mutate

library(dplyr)
gm %>%
  mutate(continent = ifelse(country == "Bahamas", "S America", continent))

答案 1 :(得分:1)

这有效:

gm[,'continent'][gm[,'country'] == "Bahamas"] <- "South America"

如果“南美洲”尚未出现在数据框中,您可能会收到类似这样的警告消息:

Warning message:
In `[<-.factor`(`*tmp*`, gm[, "country"] == "Bahamas", value = c(2L,  :
  invalid factor level, NA generated

这意味着您需要首先添加级别,您尝试发布不存在的级别:

levels(gm$continent) <- c(levels(gm$continent), "South America")
gm[,'continent'][gm[,'country'] == "Bahamas"] <- "South America"

(此方法的运行时间[数据框中的5M条目,10次重复测量]比dplyr方法快4倍)