能否在as_tibble函数中直接指定列名?(purrr代码场景)
直接在
as_tibble环节指定列名的几种简洁方法 当然可以直接指定列名,不用额外加rename步骤!这里有几个能帮你减少代码行数的小技巧,适配你用purrr的场景:
方法1:先给输入向量命名,map_dfc自动继承列名
你可以先给1:3的每个元素加上目标列名,后续map_dfc合并时会直接用这些名字作为列名,一步到位:
library(purrr) library(tidyverse) 1:3 %>% set_names(paste0("a", 1:3)) %>% # 提前给每个元素命名为a1、a2、a3 map(~ rnorm(104, .x)) %>% map_dfc(as_tibble) # 这里可以简化成直接传as_tibble,不用匿名函数
方法2:用imap_dfc结合索引直接命名
imap系列函数能同时拿到迭代的元素和它的索引,刚好可以用索引生成列名,代码更紧凑:
1:3 %>% imap_dfc(~ as_tibble(rnorm(104, .x)) %>% set_names(paste0("a", .y)))
这里.x是1:3里的每个数值,.y是对应的索引(1、2、3),直接用.y拼接出a1/a2/a3作为列名。
方法3:固定列数时,直接用tibble构造函数
如果你的列数是固定的(比如这里的3列),甚至可以不用purrr,直接写tibble的构造代码,可读性拉满:
tibble( a1 = rnorm(104, 1), a2 = rnorm(104, 2), a3 = rnorm(104, 3) )
以上几种方法都能避免额外的rename操作,帮你精简代码~
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

