起点
假设我有以下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()
、sapply
或purr::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"