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



起点

假设我有以下tibble:

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〃"香蕉5〃;

或者如果您喜欢作为r-code:

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

矢量应该如何构成

从第1行

  • 取第一列中的单词fruit.name:"Apple"
  • fruit.typ:2列中的数字
  • 制作与fruit.typ列中的数字一样多的复合词(此处:2(,并使用"Apple"和序列1:n作为复合词,其中n等于fruit.typ列中的数字,2。部分的结果:CCD_ 9。部分结果大致对应于以下代码:apple.vec <- paste0("Apple", 1:2)

从第2行

  • 水果名称:"Orange"
  • 果型:3
  • 部分结果:"Orange1", "Orange2", "Orange3"orange.vec <- paste0("Orange", 1:3)

从第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"

最新更新