我有以下数据帧:
Id Value Freq
1 A 8 2
2 B 7 3
3 C 2 4
并且我想要通过根据Freq
:复制每个CCD_ 1来获得新的数据帧
Id Value
1 A 8
2 A 8
3 B 7
4 B 7
5 B 7
6 C 2
7 C 2
8 C 2
9 C 2
我知道用purrr
可以很容易地做到这一点(我已经确定map_dfr
是最合适的函数(,但我不明白什么是最好和最";紧凑型";
您可以使用数据帧的一些不错的索引属性。
df <- data.frame(Id=c("A","B","C"),Value=c(8,7,2),Freq=c(2,3,4))
replicatedDataframe <- do.call("rbind",lapply(1:NROW(df), function(k) {
df[rep(k,df$Freq[k]),-3]
}))
使用rep
:中的times
-参数可以更容易地完成此操作
replicatedDataframe <- df[rep(1:NROW(df),times=df$Freq),-3]
将Freq
转换为向量和unnest
。
df %>%
mutate(Freq = map(Freq, seq_len)) %>%
unnest(Freq) %>%
select(-Freq)
#> # A tibble: 9 x 2
#> Id Value
#> <chr> <dbl>
#> 1 A 8
#> 2 A 8
#> 3 B 7
#> 4 B 7
#> 5 B 7
#> 6 C 2
#> 7 C 2
#> 8 C 2
#> 9 C 2