R语言新手求助:批量修改指定行的country变量值
解决方案
用dplyr(tidyverse)实现
这是直观的tidy风格写法,适合新手理解:
library(dplyr) # 先把需要修改的站点存到向量里,方便后续维护 indonesia_sites <- c('Coral Beach', 'Sental Restoration Site', 'Toya Pakeh', 'Biorock', 'Halik', 'Lembongan Bay', 'House Reef SORCE', 'Biorock TDC', 'Gili Goleng', 'Sental (Pre-Restoration Site)', 'SD Reef (east of blocks)', 'PMG Pertamina Bommie', 'Manta Point', 'Sunken Island', 'Sental Reef (Reference site) - Nusa Penida', 'Crystal Bay', 'SD Reef, Mangrove') # 用mutate+if_else修改指定行的country值 fish_2019_forplot <- fish_2019_forplot %>% mutate(country = if_else(reef_name %in% indonesia_sites, "Indonesia", country))
用Base R实现(无需额外包)
如果不想加载dplyr,直接用基础R的索引赋值也能搞定:
indonesia_sites <- c('Coral Beach', 'Sental Restoration Site', 'Toya Pakeh', 'Biorock', 'Halik', 'Lembongan Bay', 'House Reef SORCE', 'Biorock TDC', 'Gili Goleng', 'Sental (Pre-Restoration Site)', 'SD Reef (east of blocks)', 'PMG Pertamina Bommie', 'Manta Point', 'Sunken Island', 'Sental Reef (Reference site) - Nusa Penida', 'Crystal Bay', 'SD Reef, Mangrove') # 定位匹配reef_name的行,直接修改对应country值 fish_2019_forplot$country[fish_2019_forplot$reef_name %in% indonesia_sites] <- "Indonesia"
你之前代码的问题
- 初始化country列时,
c("French Polynesia")是长度为1的向量,R会自动循环填充整列,但更简洁的写法是fish_2019_forplot$country <- "French Polynesia" - 普通
if()不能处理向量操作,必须用向量化的条件函数(比如if_else())或者索引定位目标行 - 创建向量要用
c()而非c[],后者是语法错误 mutate()里的条件语句不完整,缺少判断逻辑和默认分支
内容的提问来源于stack exchange,提问作者Torrey
相关产品推荐
相关产品推荐

