如何使用purrr创建小标题。这些是我不起作用的尝试:
library(tidyverse)
vec <- set_names(1:4, letters[1:4])
map_dfr(vec, ~rep(0, 10)) # not working
bind_rows(map(vec, ~rep(0, 10))) # not working either
这将是我的基本R解决方案,但我想“整理”一下:
do.call(rbind, lapply(vec, function(x) rep(0, 10)))
#[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#a 0 0 0 0 0 0 0 0 0 0
#b 0 0 0 0 0 0 0 0 0 0
#c 0 0 0 0 0 0 0 0 0 0
#d 0 0 0 0 0 0 0 0 0 0
请注意,rep功能不是我将要使用的全部功能。对于我的问题,这不是首选的解决方案:
as_tibble(matrix(rep(0, 40), nrow = 4, dimnames = list(letters[1:4])))
致谢
答案 0 :(得分:3)
这是一个使用add_column
并将行名保留为列的想法,
library(tidyverse)
enframe(vec) %>%
add_column(!!!set_names(as.list(rep(0, 10)),paste0('column', seq(10))))
给出,
# A tibble: 4 x 12 name value column1 column2 column3 column4 column5 column6 column7 column8 column9 column10 <chr> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 a 1 0 0 0 0 0 0 0 0 0 0 2 b 2 0 0 0 0 0 0 0 0 0 0 3 c 3 0 0 0 0 0 0 0 0 0 0 4 d 4 0 0 0 0 0 0 0 0 0 0
如果不需要,您可以轻松删除value
列
答案 1 :(得分:2)
类似于@Sotos的解决方案,但使用了 dplyr 0.8 随附的新颖而闪亮的group_map
函数:
library(tidyverse)
enframe(vec) %>%
group_by(name) %>%
group_map(~rep(0,10) %>% as.list %>% bind_cols(.x, .))
输出:
# A tibble: 4 x 12
# Groups: name [4]
name value V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
<chr> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 a 1 0 0 0 0 0 0 0 0 0 0
2 b 2 0 0 0 0 0 0 0 0 0 0
3 c 3 0 0 0 0 0 0 0 0 0 0
4 d 4 0 0 0 0 0 0 0 0 0 0
答案 2 :(得分:1)
尽管我很确定,但该解决方案有效,但还有另一种方式来构造小标题,因此您不需要这种按行创建:
map(vec,~rep(0,10)) %>% map(enframe) %>% map(spread,name,value) %>% bind_rows