Добавление нового столбца строки в фрейм данных на основе предыдущего столбца цифр c в R - PullRequest
0 голосов
/ 17 января 2020

У меня есть данные для 400 000 деревьев 6 разных видов. Каждому виду присваивается числовой код вида c, который соответствует конкретному виду c. Я хотел бы добавить еще один столбец, содержащий научное название c каждого дерева. Коды видов не являются последовательными, поскольку эти данные были отфильтрованы из 490 000 деревьев 163 видов на основе численности. Вот пример данных, похожих на то, что у меня есть:

Index    Age    Species_code
0        45     14
1        47     32
2        14     62
3        78     126
4        40     14
5        38     17 
6        28     47

А вот пример того, к чему я хотел бы добраться:

Index    Age    Species_code    Species
0        45     14              Licania_heteromorpha
1        47     32              Pouteria_reticulata
2        14     62              Chrysophyllum_cuneifolium
3        78     126             Eperua_falcata
4        40     14              Licania_heteromorpha
5        38     17              Simaba_cedron
6        28     47              Sterculia_pruriens

Я пробовал разные вещи строки

if (Species_code == 14)
{
}

Однако, это дает мне TRUE или FALSE на выходе

Ответы [ 3 ]

1 голос
/ 17 января 2020

Одним из решений было бы использование mutate с case_when, если вы знаете, какие номера соответствуют каким видам, я заполнил некоторые из них, в которых указан код, по которому нужно следовать:

library(tidyverse)
x <-"
  Index    Age    Species_code
0        45     14
1        47     32
2        14     62
3        78     126
4        40     14
5        38     17 
6        28     47"
y <- read.table(text = x, header = TRUE)
y <- y %>% 
  mutate(species = case_when(Species_code == 14 ~ "Licania_heteromorpha",
                             Species_code == 32 ~ "Pouteria_reticulata",
                             Species_code == 62 ~"Chrysophyllum_cuneifolium"))   #etc...
y
#   Index Age Species_code                   species
# 1     0  45           14      Licania_heteromorpha
# 2     1  47           32       Pouteria_reticulata
# 3     2  14           62 Chrysophyllum_cuneifolium
# 4     3  78          126                      <NA>
# 5     4  40           14      Licania_heteromorpha
# 6     5  38           17                      <NA>
# 7     6  28           47                      <NA>

Хотя, если у вас есть отдельный набор данных видов и кодов, было бы более целесообразно объединить.

0 голосов
/ 17 января 2020

Поскольку у вашей проблемы только 6 видов, вы можете сделать это:

df$Species = NULL

df$Species[df$Species_code == 14] = 'Licania_heteromorpha'
df$Species[df$Species_code == 32] = 'Pouteria_reticulata'
.....
0 голосов
/ 17 января 2020

Возможно, вы захотите использовать функцию ifelse().

Вы также можете использовать:

my_names <- numeric()
my_names[47] <- "Licania_heteromorpha"
my_names[63] <- "Chrysophyllum_cuneifolium"
...
df$Species <- names[df$Species_code]

Вы также можете взглянуть на dplyr многочисленные функции для что, как case_when и recode. См .: https://dplyr.tidyverse.org/reference.

...