R 和 dplyr 它没有识别变量并实现条件

问题描述 投票:0回答:1

我有一份关于动物目击事件的

data frame
(超过 300 种),有鲸鱼、海豚、鳍足类和企鹅。

我想创建一个新列

reino
,其中
misticeto
代表鲸鱼,
odontoceto
代表海豚,
pinipede
代表蜈蚣,
penguin
代表企鹅。

但是当我这样做时,一只特定的鲸鱼(Ballena franca australis (Eubalaena australis))的 NA 值为

reino column

我尝试了数百万种方法,但没有任何效果。

library(data.table)
library(dplyr)
> packageVersion("dplyr")
[1] ‘1.1.4’


dt = data.table(especie= c('Ballena franca austral (Eubalaena australis)','Ballena barbada no identificada (Parvorden Mysticeti)', 'Ballena jorobada (Megaptera novaeangliae)', 'Ballena rorcual no identificada (Balaenoptera sp.)', 'Ballena sei (Balaenoptera borealis)', 'Ballena fin (Balaenoptera physalus)','Delfín austral (Lagenorhynchus australis)', 'Delfín no identificado (Familia Delphinidae)', 'Tonina overa (Cephalorhynchus commersonii)', 'Delfín oscuro (Lagenorhynchus obscurus)','Lobo marino de dos pelos no identificado (Arctocephalus sp.)', 'Lobo marino no identificado (Familia Otariidae)', 'Lobo marino de dos pelos sudamericano (Arctocephalus australis)', 'Lobo marino de un pelo sudamericano (Otaria flavescens)', 'Lobo marino de dos pelos antártico (Arctocephalus gazella)','Lobo marino de dos pelos sudamericano (Arctocephalusaustralis)','Pingüino patagónico (Spheniscus magellanicus)', 'Pingüino no identificado (Familia Spheniscidae)', 'Cormorán Imperial (Phalacrocorax albiventer)', 'Pingüino penacho amarillo austral (Eudyptes chrysocome)', 'Pingüino rey (Aptenodytes patagonicus)'))

as.character(dt$especie)

我想做这个:

dt$reino[dt$especie %in% c('Ballena franca austral (Eubalaena australis)','Ballena barbada no identificada (Parvorden Mysticeti)', 'Ballena jorobada (Megaptera novaeangliae)', 'Ballena rorcual no identificada (Balaenoptera sp.)', 'Ballena sei (Balaenoptera borealis)', 'Ballena fin (Balaenoptera physalus)', 'Ballena barbada no identificada(Parvorden Mysticeti)')] <- 'misticeto'

dt$reino[dt$especie %in% c('Delfín austral (Lagenorhynchus australis)', 'Delfín no identificado (Familia Delphinidae)', 'Tonina overa (Cephalorhynchus commersonii)', 'Delfín oscuro (Lagenorhynchus obscurus)')] <- 'odontoceto'

dt$reino[dt$especie %in% c('Lobo marino de dos pelos no identificado (Arctocephalus sp.)', 'Lobo marino no identificado (Familia Otariidae)', 'Lobo marino de dos pelos sudamericano (Arctocephalus australis)', 'Lobo marino de un pelo sudamericano (Otaria flavescens)', 'Lobo marino de dos pelos antártico (Arctocephalus gazella)','Lobo marino de dos pelos sudamericano (Arctocephalusaustralis)')] <- 'pinipede'

dt$reino[dt$especie %in% c('Pingüino patagónico (Spheniscus magellanicus)', 'Pingüino no identificado (Familia Spheniscidae)', 'Cormorán Imperial (Phalacrocorax albiventer)', 'Pingüino penacho amarillo austral (Eudyptes chrysocome)', 'Pingüino rey (Aptenodytes patagonicus)')] <- 'penguin'

当我第一次运行代码时出现此警告:

Warning message: Unknown or uninitialised column: reino. 

然后,我继续运行代码,新列

reino
NA
值仅适用于 Ballena franca austral (Eubalaena australis)。

我尝试做这些事情,但没有成功:

> class(dt)
[1] "tbl_df"     "tbl"        "data.frame"

### 1
dt %>% left_join(data.frame(especie = c('Ballena franca austral (Eubalaena australis)', reino = c('misticeto'))))

## 2
mutate(reino = case_match(especie, 'Ballena franca austral (Eubalaena australis)' ~ 'misticeto'))

## 3
misticeto <- filter (dt, especie %in% c('Ballena barbada no identificada (Parvorden Mysticeti)','Ballena barbada no identificada(Parvorden Mysticeti)', 'Ballena fin (Balaenoptera physalus)','Ballena jorobada (Megaptera novaeangliae)', 'Ballena rorcual no identificada (Balaenoptera sp.)','Ballena sei (Balaenoptera borealis)','Ballena franca austral (Eubalaena australis)'))

## 4
dt <- dt %>%
  mutate(reino = case_when(especie %in% c('Ballena franca austral (Eubalaena australis)','Ballena barbada no identificada (Parvorden Mysticeti)','Ballena barbada no identificada(Parvorden Mysticeti)', 'Ballena fin (Balaenoptera physalus)','Ballena jorobada (Megaptera novaeangliae)', 'Ballena rorcual no identificada (Balaenoptera sp.)','Ballena sei (Balaenoptera borealis)') ~ 'misticeto', 
                           
                           especie %in% c('Delfín austral (Lagenorhynchus australis)', 'Delfín no identificado (Familia Delphinidae)', 'Delfín oscuro (Lagenorhynchus obscurus)', 'Tonina overa (Cephalorhynchus commersonii)') ~ 'odontoceto',
                           
                           especie %in% c('Lobo marino de dos pelos antártico (Arctocephalus gazella)', 'Lobo marino de dos pelos no identificado (Arctocephalus sp.)', 'Lobo marino de dos pelos sudamericano (Arctocephalus australis)', 'Lobo marino de dos pelos sudamericano (Arctocephalusaustralis)', 'Lobo marino de un pelo sudamericano (Otaria flavescens)') ~ 'pinipede',
                           
                           especie %in% c('Cormorán Imperial (Phalacrocorax albiventer)', 'Pingüino no identificado (Familia Spheniscidae)', 'Pingüino patagónico (Spheniscus magellanicus)', 'Pingüino penacho amarillo austral (Eudyptes chrysocome)','Pingüino rey (Aptenodytes patagonicus)'))) ~ 'pinguin'

But when I do this, the dt changes from data frame to Value (it's "excluded"):

> class(dt)
[1] "formula"

第二个问题是:

  • 我注意到一只海豚和一只企鹅达到了
    misticeto
    (鲸鱼)状态。
misticeto<-filter(dt, reino == "misticeto");misticeto

> table(misticeto$especie)

Ballena barbada no identificada (Parvorden Mysticeti)  Ballena barbada no identificada(Parvorden Mysticeti) 
                                                   23                                                     1 
                  Ballena fin (Balaenoptera physalus)          Ballena franca austral (Eubalaena australis) 
                                                    4                                                    33 
            Ballena jorobada (Megaptera novaeangliae)    Ballena rorcual no identificada (Balaenoptera sp.) 
                                                   13                                                     9 
                  Ballena sei (Balaenoptera borealis)               Delfín oscuro (Lagenorhynchus obscurus) 
                                                    8                                                     1 
               Pingüino rey (Aptenodytes patagonicus) 
                                                    1 

#The Delfín oscuro (Lagenorhynchus obscurus) and Pingüino rey (Aptenodytes patagonicus)  shouldn't be there.

  • 而且,并非所有海豚都会进入
    reino
    列,其中一只失踪了(达到了
    misticeto
    状态)。
odontocetos<-filter(dt, reino == "odontoceto");odontocetos
> table(odontocetos$especie)

   Delfín austral (Lagenorhynchus australis) Delfín no identificado (Familia Delphinidae) 
                                          25                                           12 
  Tonina overa (Cephalorhynchus commersonii) 
                                           8 

#The dolphin that came to misticeto condition is missing here, 'Delfín oscuro (Lagenorhynchus obscurus)'

有人可以帮助我吗?我不明白发生了什么。

谢谢!

更新

我要插入 R 为我显示的内容,我从这里开始处理物种的名称

> table(dt$especie)

          Ballena barbada no identificada (Parvorden Mysticeti) 
                                                             24 
                            Ballena fin (Balaenoptera physalus) 
                                                              4 
                   Ballena franca austral (Eubalaena australis) 
                                                             33 
                      Ballena jorobada (Megaptera novaeangliae) 
                                                             13 
             Ballena rorcual no identificada (Balaenoptera sp.) 
                                                              9 
                            Ballena sei (Balaenoptera borealis) 
                                                              8 
                   Cormorán Imperial (Phalacrocorax albiventer) 
                                                              1 
                      Delfín austral (Lagenorhynchus australis) 
                                                             25 
                   Delfín no identificado (Familia Delphinidae) 
                                                             12 
                        Delfín oscuro (Lagenorhynchus obscurus) 
                                                              1 
     Lobo marino de dos pelos antártico (Arctocephalus gazella) 
                                                              1 
   Lobo marino de dos pelos no identificado (Arctocephalus sp.) 
                                                             42 
Lobo marino de dos pelos sudamericano (Arctocephalus australis) 
                                                             29 
 Lobo marino de dos pelos sudamericano (Arctocephalusaustralis) 
                                                              1 
        Lobo marino de un pelo sudamericano (Otaria flavescens) 
                                                             22 
                Lobo marino no identificado (Familia Otariidae) 
                                                             31 
                Pingüino no identificado (Familia Spheniscidae) 
                                                              3 
                  Pingüino patagónico (Spheniscus magellanicus) 
                                                             27 
        Pingüino penacho amarillo austral (Eudyptes chrysocome) 
                                                              1 
                         Pingüino rey (Aptenodytes patagonicus) 
                                                              1 
                     Tonina overa (Cephalorhynchus commersonii) 

对我来说,看起来和代码中的一模一样

Ballena franca austral (Eubalaena australis)

r dplyr filter conditional-statements conditional-formatting
1个回答
0
投票

试试这个:

library(data.table)
library(dplyr)

dt = data.table(especie= c('Ballena franca austral (Eubalaena australis)','Ballena barbada no identificada (Parvorden Mysticeti)', 'Ballena jorobada (Megaptera novaeangliae)', 'Ballena rorcual no identificada (Balaenoptera sp.)', 'Ballena sei (Balaenoptera borealis)', 'Ballena fin (Balaenoptera physalus)','Delfín austral (Lagenorhynchus australis)', 'Delfín no identificado (Familia Delphinidae)', 'Tonina overa (Cephalorhynchus commersonii)', 'Delfín oscuro (Lagenorhynchus obscurus)','Lobo marino de dos pelos no identificado (Arctocephalus sp.)', 'Lobo marino no identificado (Familia Otariidae)', 'Lobo marino de dos pelos sudamericano (Arctocephalus australis)', 'Lobo marino de un pelo sudamericano (Otaria flavescens)', 'Lobo marino de dos pelos antártico (Arctocephalus gazella)','Lobo marino de dos pelos sudamericano (Arctocephalusaustralis)','Pingüino patagónico (Spheniscus magellanicus)', 'Pingüino no identificado (Familia Spheniscidae)', 'Cormorán Imperial (Phalacrocorax albiventer)', 'Pingüino penacho amarillo austral (Eudyptes chrysocome)', 'Pingüino rey (Aptenodytes patagonicus)'))

library(textclean)
dt <- dt %>% 
  mutate(especie =replace_non_ascii(especie))

然后是你的其他代码。

如果这不起作用,您可能还有其他问题,我将删除此答案。

© www.soinside.com 2019 - 2024. All rights reserved.