Фрейм данных меняет имена факторов, если частота фактора ниже некоторого числа - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть фрейм данных со столбцом факторов и столбцом чисел, как показано ниже.

x <- data.frame(c("Cat", "Dog", "Cat",
                  "Elephant", "Cat", "Zebra",
                  "Cow", "Cow", "Sheep"),
                 c(12, 5, 19, 6, 1, 20, 3, 11, 4))
colnames(x) <- c("animals", "number")

Я хочу изменить этот фрейм данных так, чтобы, если частота животных в моем столбце "животных"меньше 2, имена животных изменены на «другие», так что это будет выглядеть следующим образом:

data.frame(c("Cat", "Other", "Cat",
            "Other", "Cat", "Other",
              "Cow", "Cow", "Other"),
                c(12, 5, 19, 6, 1, 20, 3, 11, 4))

Я определил, как определить, какие столбцы имеют частоту ниже 2, используякод ниже, но не могу понять, как изменить имя переменных, связанных с этими числами.Любой комментарий будет оценен!

x.count <- count(x, "animals")
which(x.count$freq < 2)

1 Ответ

0 голосов
/ 07 декабря 2018

Мы можем использовать ifelse

library(tidyverse)
n <- 2
x %>% 
  group_by(animals) %>% 
  mutate(animals1 = as.character(animals), animals1 = ifelse(n() < n,
          "Other", animals1)) %>%
  ungroup %>%
  select(animals = animals1, number)
# A tibble: 9 x 2
#  animals number
#  <chr>    <dbl>
#1 Cat         12
#2 Other        5
#3 Cat         19
#4 Other        6
#5 Cat          1
#6 Other       20
#7 Cow          3
#8 Cow         11
#9 Other        4

Или с base R

i1 <- with(x, ave(seq_along(animals), animals, FUN = length) < n)
levels(x$animals) <- c(levels(x$animals), "Other")
x$animals[i1] <- "Other"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...