Как расширить фрейм данных от суммированных до единичных наблюдений - PullRequest
3 голосов
/ 10 апреля 2019

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

    set.seed(1234)
    df <- expand.grid(factor = c("A", "B"),
        date = seq(as.Date("2019-05-04"), as.Date("2019-05-08"),"day"))
    df$Abundance <- sample(seq(3,10,1), nrow(df), replace = T)

Что у меня есть:

    factor       date Abundance
    1       A 2019-05-04         3
    2       B 2019-05-04         7
    3       A 2019-05-05         7
    4       B 2019-05-05         7
    5       A 2019-05-06         9
    6       B 2019-05-06         8
    7       A 2019-05-07         3
    8       B 2019-05-07         4
    9       A 2019-05-08         8
    10      B 2019-05-08         7

А теперь я хочу преобразовать фрейм данных, чтобы он выглядел так:

     factor       date  Abundance
    1       A 2019-05-04         1
    2       A 2019-05-04         1
    3       A 2019-05-04         1
    4       B 2019-05-04         1
    5       B 2019-05-04         1
    6       B 2019-05-04         1
    7       B 2019-05-04         1
    8       B 2019-05-04         1
    9       B 2019-05-04         1
    10       B 2019-05-04         1

    ...

Кто-нибудь знает, как это сделать с помощью dplyr?

Спасибо за вашу помощь!

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

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

library(tidyverse)
uncount(df, Abundance) %>%
       mutate(Abundance = 1) 
0 голосов
/ 10 апреля 2019

Вы можете использовать rep и slice, где мы повторяем каждую строку Abundance количество раз.

library(dplyr)

df %>%
  slice(rep(1:n(), Abundance)) %>%
  mutate(Abundance = 1)


#   factor       date Abundance
#1       A 2019-05-04         1
#2       A 2019-05-04         1
#3       A 2019-05-04         1
#4       B 2019-05-04         1
#5       B 2019-05-04         1
#6       B 2019-05-04         1
#7       B 2019-05-04         1
#8       B 2019-05-04         1
#9       B 2019-05-04         1
#10      B 2019-05-04         1
#....

То же самое с использованием базы R будет

transform(df[rep(1:nrow(df), df$Abundance), ], Abundance = 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...