R语言如何为dataframe姓名列的每个值匹配列表5个条目生成对应行
R实现姓名与条目全匹配生成单行对应结果
你需要实现的是两个集合的笛卡尔积效果,即所有姓名和所有条目的两两组合,每个组合单独占一行,具体实现方案如下:
依赖tidyverse的最简方案
使用tidyverse内置的crossing()函数可以直接输出tibble格式的结果:
library(tidyverse) # 初始化示例数据 testdata <- as_tibble(c("Steve","Paul","Mary"), .name_repair = ~"name") product <- c("Item1","Item2","Item3","Item4","Item5") # 生成全匹配结果 result <- crossing(testdata, product)
纯base R实现方案
如果不想加载第三方包,可以用base R的expand.grid()函数实现:
# 初始化示例数据 name_vec <- c("Steve","Paul","Mary") product <- c("Item1","Item2","Item3","Item4","Item5") # 生成全匹配结果,如需tibble格式可在外层套as_tibble() result <- expand.grid(name = name_vec, product = product)
输出效果说明
最终输出的结果结构如下,完全符合你要求的每个姓名搭配一个条目单独成行的效果:
name product 1 Steve Item1 2 Steve Item2 3 Steve Item3 4 Steve Item4 5 Steve Item5 6 Paul Item1 7 Paul Item2 ...
内容的提问来源于stack exchange,提问作者T_R
相关产品推荐
相关产品推荐

