【发布时间】:2020-11-11 07:37:35
【问题描述】:
我想将 df1 中的每个值分配给 df2 中的每个值
df1 <- data.frame(TABLE = c(1, 2, 3))
df2 <- data.frame(PERSON = c("A", "B", "C"))
想要的输出
【问题讨论】:
-
试试
merge(df1, df2, all = TRUE)
标签: r
我想将 df1 中的每个值分配给 df2 中的每个值
df1 <- data.frame(TABLE = c(1, 2, 3))
df2 <- data.frame(PERSON = c("A", "B", "C"))
想要的输出
【问题讨论】:
merge(df1, df2, all = TRUE)
标签: r
一种可能的解决方案是使用expand.grid 函数,它根据所提供向量的所有组合创建一个data.frame。
为了完美匹配所需的输出,您需要放置第一人称向量,然后更改列的顺序。 (来自@allan 的评论)
df1 <- data.frame(TABLE = c(1, 2, 3))
df2 <- data.frame(PERSON = c("A", "B", "C"))
expand.grid(PERSON = df2$PERSON, TABLE = df1$TABLE)[2:1]
#> TABLE PERSON
#> 1 1 A
#> 2 1 B
#> 3 1 C
#> 4 2 A
#> 5 2 B
#> 6 2 C
#> 7 3 A
#> 8 3 B
#> 9 3 C
【讨论】:
expand.grid(PERSON = df2$PERSON, TABLE = df1$TABLE)[2:1] 将完美匹配所需的输出。
我们可以使用merge:
merge(df1, df2)
给予:
TABLE PERSON
1 1 A
2 2 A
3 3 A
4 1 B
5 2 B
6 3 B
7 1 C
8 2 C
9 3 C
【讨论】:
你也可以使用crossing:
library(tidyr)
crossing(df1,df2)
# A tibble: 9 x 2
TABLE PERSON
<dbl> <chr>
1 1 A
2 1 B
3 1 C
4 2 A
5 2 B
6 2 C
7 3 A
8 3 B
9 3 C
【讨论】: