Использование предыдущих столбцов для добавления нового - PullRequest
0 голосов
/ 27 октября 2019

У меня есть датафрейм в R, и я пытаюсь добавить новый столбец, который будет использовать информацию. из одного из других столбцов. В частности, у меня есть возраст организма (в столбце), и я пытаюсь сгруппировать их следующим образом в новом столбце.

возраст 1-3: младенецвозраст 4-6: малыш и т. д. Это в R-studio.

Я пытался использовать некоторые операторы if else, но они просто не работают.

Ответы [ 2 ]

0 голосов
/ 27 октября 2019

ниже рабочего образца с выделенной функцией для определения категорий:

#define sample
organism <- c('cat','dog','horse','elephant','snake','ant','bear')
ages <- c(1,4,7,2,5,2,1)
df <- data.frame(organism,ages)

#define classification function
classify_age <- function(age) {

  if (age >= 1 & age <= 3)
    {return ("infant")}
  else if (age >= 4 & age <= 6)
    {return ("toddler")}
  else
    {return("adult")}

}

#create the new data frame column
df$category <- lapply(df$ages, classify_age)

#print data frame
df
0 голосов
/ 27 октября 2019

Использование ifelse a base-r решение

df$Category <- ifelse(df$Age<=3, "Infant", ifelse(df$Age<=6, "Toddler", ifelse(df$Age<=13, "Adolescence", ifelse(df$Age<=19, "Teenage", ifelse(df$Age<=59, "Adult", "Senior")))))
# -------------------------------------------------------------------------
# df
#     Id Age    Category
# 1   1   1      Infant
# 2   2   5     Toddler
# 3   3  10 Adolescence
# 4   4  12 Adolescence
# 5   5   3      Infant
# 6   6  23       Adult
# 7   7  55       Adult
# 8   8  42       Adult
# 9   9  92      Senior
# 10 10  78      Senior
# 11 11  33       Adult
# 12 12  44       Adult
# 13 13  25       Adult
# 14 14  13 Adolescence
# 15 15  10 Adolescence
# 16 16  19     Teenage
# 17 17  45       Adult
# 18 18  39       Adult

Использование dplyr mutate и case_when

library(dplyr)
df <- df %>%
  mutate(Category =
  case_when(
    Age <=3 ~ "Infant", 
    Age <=6 ~ "Toddler",
    Age <=13 ~ "Adolesence",
    Age <=19 ~ "Teenage",
    Age <=59 ~ "Adult",
    TRUE ~ "Senior"

  )
)
# -------------------------------------------------------------------------
# df
#     Id Age   Category
# 1   1   1     Infant
# 2   2   5    Toddler
# 3   3  10 Adolesence
# 4   4  12 Adolesence
# 5   5   3     Infant
# 6   6  23      Adult
# 7   7  55      Adult
# 8   8  42      Adult
# 9   9  92     Senior
# 10 10  78     Senior
# 11 11  33      Adult
# 12 12  44      Adult
# 13 13  25      Adult
# 14 14  13 Adolesence
# 15 15  10 Adolesence
# 16 16  19    Teenage
# 17 17  45      Adult
# 18 18  39      Adult
# 

См. Комментарии выше, а также вам нужнопредоставить воспроизводимый пример, чтобы получить цель решения вашей конкретной проблемы. Предоставление воспроизводимого примера гарантирует быстрый ответ.

Пример данных

df <- data.frame(Id = seq(1,18,1), 
                 Age = c(1,5,10, 12, 3, 23, 55, 42, 92, 78, 33, 44, 25, 13, 10, 19, 45, 39))

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...