You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于指定列表为R语言data.frame添加分类新列求助

问题

我有一个名为species的data.frame,包含物种学名数据:

structure(list(cientifico = structure(c(1L, 2L, 3L, 4L, 11L, 
13L), levels = c("Capros aper", "Argentina sphyraena", "Arnoglossus imperialis", 
"Arnoglossus laterna", "Blennius ocellaris", "Boops boops", "Buglossidium luteum", 
"Callionymus lyra", "Callionymus maculatus", "Cepola macrophthalma", 
"Chelidonichthys cuculus", "Chelidonichthys lucerna", "Chelidonichthys obscurus", 
"Conger conger", "Eutrigla gurnardus", "Gadiculus argenteus", 
"Gaidropsarus macrophthalmus", "Galeus melastomus", "Helicolenus dactylopterus", 
"Lepidorhombus boscii", "Lepidorhombus whiffiagonis", "Trachinus draco", "Trachurus trachurus", "Zeus faber"), class = "factor")), row.names = c(NA, 
6L), class = "data.frame")

还有一个名为small的向量,包含小型物种的学名:

c("Argentina sphyraena", "Arnoglossus imperialis", "Arnoglossus laterna", 
"Blennius ocellaris", "Buglossidium luteum", "Callionymus lyra")

我想给species新增一列,规则是:如果物种存在于small中,新列值为"pq",否则为"gr"。尝试用mutate、ifelse和%in%实现但没成功,求解决思路。

解决方案

你之前失败的核心原因是species$cientifico是因子(factor)类型,而small是字符向量,直接用%in%会因类型不匹配导致判断逻辑失效。只需要先把因子转换为字符型,就能正常实现需求,具体代码如下:

方法1:使用dplyr包实现

library(dplyr)

# 新增size_category列
species <- species %>%
  mutate(size_category = ifelse(as.character(cientifico) %in% small, "pq", "gr"))

方法2:基础R实现(无需额外包)

# 直接添加新列
species$size_category <- ifelse(as.character(species$cientifico) %in% small, "pq", "gr")

验证结果

运行代码后,species会新增size_category列,最终数据如下:

# 查看结果
print(species)
#>                cientifico size_category
#> 1             Capros aper            gr
#> 2     Argentina sphyraena            pq
#> 3  Arnoglossus imperialis            pq
#> 4     Arnoglossus laterna            pq
#> 5 Chelidonichthys cuculus            gr
#> 6 Chelidonichthys obscurus            gr

如果后续需要频繁操作该列,也可以先将cientifico永久转换为字符型:

# 转换因子为字符
species$cientifico <- as.character(species$cientifico)
# 后续直接使用判断逻辑
species <- species %>% mutate(size_category = ifelse(cientifico %in% small, "pq", "gr"))

内容的提问来源于stack exchange,提问作者Juan Carlos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 15:24:59