合并 tibble 中两列的内容并将结果输出为向量

Merge the contents from two columns in a tibble and output the result as a vector

起点

假设我有以下问题:

fruits.dt <- tibble(
  fruit.name = c("Apple", "Orange", "Banana"),
  fruit.typ = c(2,3,5),
  fruit.color = c("red", "orange", "yellow")
)

结果应该是这样的...

从这个tibble我想构建以下向量:

"Apple1","Apple2","Orange1","Orange2","Orange3","Banana1","Banana2","Banana3","Banana4", "Banana5"

或者如果你喜欢 r-code:

fruits.final <- c("Apple1","Apple2",
              "Orange1","Orange2","Orange3",
              "Banana1","Banana2","Banana3", "Banana4", "Banana5"
              )

向量应该如何构成?

从第 1 行开始

从第 2 行开始

从第 3 行...到第 n 行

遍历所有行并从所有“部分结果”中形成一个复合向量。

解决方案尝试

我尝试过将dplyr::mutate()past0()sapplypurr::map()结合使用,但我对这个问题的了解太有限了。 例如:

library("tidyverse")    
fruits.dt %>%
      mutate(fruit.code = paste0(fruit.name, 1:fruit.type))

使用dplyr::pull()你可以提取相应的列作为向量,但之后我也不知道该怎么做:

fruit.name.vec <- fruits.dt %>%
  pull(fruit.name)

对一条链试试这个:

#Code
paste0(mapply(function(x,y) paste0(x,seq(1,y,by=1),collapse = ','),
              x=fruits.dt$fruit.name,y=fruits.dt$fruit.typ,SIMPLIFY = T),
       collapse = ',')

输出:

[1] "Apple1,Apple2,Orange1,Orange2,Orange3,Banana1,Banana2,Banana3,Banana4,Banana5"

或者这个向量:

#Code 2
v2 <- mapply(function(x,y) paste0(x,seq(1,y,by=1),collapse = ','),
       x=fruits.dt$fruit.name,y=fruits.dt$fruit.typ)
#Unlist
v3 <- unlist(lapply(v2,function(x) strsplit(x,',')),use.names = F)

输出:

v3
 [1] "Apple1"  "Apple2"  "Orange1" "Orange2" "Orange3" "Banana1" "Banana2" "Banana3" "Banana4"
[10] "Banana5"