我有一些数据可以在不同的日期和地点观察到昆虫。 而且我想散布数据帧,以便对每只昆虫观察到一行。
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吗?
感谢您的帮助!
答案 0 :(得分:1)
我们可以使用uncount
中的tidyr
library(tidyverse)
uncount(df, Abundance) %>%
mutate(Abundance = 1)
答案 1 :(得分:0)
您可以使用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)