r-使用purrr复制数据帧的行



我有以下数据帧:

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

相关内容

最新更新