如何将数据框扩展为从汇总观察到单个观察

时间:2019-04-10 07:33:30

标签: r dataframe dplyr

我有一些数据可以在不同的日期和地点观察到昆虫。 而且我想散布数据帧,以便对每只昆虫观察到一行。

    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 个答案:

答案 0 :(得分:1)

我们可以使用uncount中的tidyr

library(tidyverse)
uncount(df, Abundance) %>%
       mutate(Abundance = 1) 

答案 1 :(得分:0)

您可以使用repslice,我们在每一行重复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)