r - 在 R 中编写组合
问题描述
我有一个像这样的数据框(df)
name col1 col2
pippo A;B;C E;F;G;
pluto G;H X;Y;Z;E;O;D
我想写出 col1 的 1 个元素和 col 2 的 1 个元素之间的所有可能组合,并且每个组合都作为数据帧返回,例如
name col1 col2
pippo A E
pippo A F
pippo A G
pippo B E
... and so on.
考虑到我有所有字母并且 col1 和 col2 中的元素数量可以变化(从 1 个元素到 10 个),R 可以吗?
解决方案
我们可以crossing
在拆分列后使用;
library(dplyr)
library(tidyr)
library(purrr)
df %>%
transmute(name, new = map2(strsplit(col1, ";"),
strsplit(col2, ";"), ~ crossing(col1 = .x, col2 = .y))) %>%
unnest(c(new))
-输出
# A tibble: 21 x 3
# name col1 col2
# <chr> <chr> <chr>
# 1 pippo A E
# 2 pippo A F
# 3 pippo A G
# 4 pippo B E
# 5 pippo B F
# 6 pippo B G
# 7 pippo C E
# 8 pippo C F
# 9 pippo C G
#10 pluto G D
# … with 11 more rows
数据
df <- structure(list(name = c("pippo", "pluto"), col1 = c("A;B;C",
"G;H"), col2 = c("E;F;G;", "X;Y;Z;E;O;D")), class = "data.frame",
row.names = c(NA,
-2L))
推荐阅读
- java - Java在一组整数中找到特定位置的最小整数
- python - 袖扣图表是否与 Panel 兼容?
- python - 在 gmail 上发送 Python 数据帧
- php - 更改现有添加按钮代码中的额外按钮颜色
- ios - 如何设置在 NSTextStorage 中键入的 *next* 字符的属性
- sql - PostgreSQL to_char() 没有按预期工作
- java - Spring Boot Application - 模糊映射无法映射方法
- reactjs - 如何在私有路由中访问 redux 商店?
- ruby-on-rails - 没有将哈希隐式转换为字符串 无法创建“API_development”数据库。请检查您的配置。导轨中止
- sql - 使用 sql server 前导零