我有一个数据集,其中指定了每个人的记录数:
set.seed(99)
# Create values from a Poisson distribution
freqs <- rpois(100, 3)
# Add an ID to each row
freqs <- as.data.frame(freqs)
freqs$id <- seq_len(nrow(freqs))现在我希望freqs$freqs中的值是每个ID的观察值。
ID freqs
1 3
2 1
... ...
3 2结果是:
ID freqs
1 3
1 3
1 3
2 1
... ....
3 2
3 2发布于 2019-06-11 00:08:27
一个选项是来自tidyr的uncount
library(tidyr)
library(dplyr)
uncount(freqs, freqs, .remove = FALSE) %>%
as_tibble %>%
select(id, freqs)发布于 2019-06-11 00:16:35
获取ids的另一个tidyverse选项:
plyr::ldply(purrr::map2(freqs$id,freqs$freqs,function(x,y) rep(x,y)),
data.frame) 发布于 2019-06-11 00:24:11
as.data.frame(lapply(freqs, rep, freqs$freqs))
# freqs id
# 1 3 1
# 2 3 1
# 3 3 1
# 4 1 2
# 5 4 3
# 6 4 3
# 7 4 3
# 8 4 3
# 9 8 4
# 10 8 4
# 11 8 4
# 12 8 4
# 13 8 4
# 14 8 4
# 15 8 4
# 16 8 4
# ...或
purrr::map_dfr(freqs, rep, freqs$freqs)
# # A tibble: 293 x 2
# freqs id
# <int> <int>
# 1 3 1
# 2 3 1
# 3 3 1
# 4 1 2
# 5 4 3
# 6 4 3
# 7 4 3
# 8 4 3
# 9 8 4
# 10 8 4
# # ... with 283 more rowshttps://stackoverflow.com/questions/56529845
复制相似问题