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

问题描述 投票:3回答:2

我有一些丰富的数据,用于观察不同日期和地点的昆虫。我想传播数据框,这样我就可以得到每一只昆虫的一行。

    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做到这一点?

谢谢你的帮助!

r dataframe dplyr
2个回答
1
投票

我们可以使用uncounttidyr

library(tidyverse)
uncount(df, Abundance) %>%
       mutate(Abundance = 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)
© www.soinside.com 2019 - 2024. All rights reserved.