我的问题与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)
非常感谢任何见解!
答案 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倍)