ExploratoryのKeiのEDASalonの投稿です!
Twitter @kei51e
コメントやフィードバックはこちらのトピックかTwitterでお願いします!
@Kei_Saito さん
自転車のレンタルデータから考えるリア充度についての考察 楽しく読ませて頂きました!
文末に記載されていた、下記のデータ加工の部分ですが、
また、データを毎時間ごとのデータから1行1ユーザのデータに変換する、というところがかなり強引なので、もしもっといいやり方を知っている方がいたらぜひ教えて下さい!
(function(df){
l <- lapply(df$value, function(x){ return (rep(1,x)) })
df$l <- l
df
}) %>%
unnest(l, .drop = FALSE)
dplyr::slice()
を使うのはいかがでしょうか。ベンチマークは測ってないのでlapply(*) %>% unnest(*)
に比べて高速かどうかはわかりませんが…
library(dplyr)
df <- tibble(id = paste0("Row",1:5),
value = c(2,1,NA_real_,5,3))
df
# # A tibble: 5 x 2
# id value
# <chr> <dbl>
# 1 Row1 2
# 2 Row2 1
# 3 Row3 NA
# 4 Row4 5
# 5 Row5 3
# df$valueの値分、行をリピートさせる。
df %>%
dplyr::filter(!is.na(value)) %>%
dplyr::slice(rep(1:n(), times = value))
# A tibble: 11 x 2
# id value
# <chr> <dbl>
# 1 Row1 2
# 2 Row1 2
# 3 Row2 1
# 4 Row4 5
# 5 Row4 5
# 6 Row4 5
# 7 Row4 5
# 8 Row4 5
# 9 Row5 3
# 10 Row5 3
# 11 Row5 3
お手すきの際に、ご確認いただけますと幸いです!