我希望在R中自动化以前手工完成的过程,并且非常耗时。我想将一系列从一个数据框观察到另一个数据框中的每个唯一变量。一个使用数据的例子可能会更好地说明这一点…
表1包含对每种动物的许多观察结果,我想在这个表中为每种类型的动物添加一组行。
动物 | 颜色 | 气质 | 猫 | 黑色 | 平静 | 狗
---|---|---|
米色 | 焦虑 | |
白色 | 的 |
1。我们创建了一个易于使用和可重复的示例数据
d1 <- data.frame(an = c("c", "d", "c"),
cl = c("bl", "be", "wh"),
tm = c("cl", "an", "pl"))
d2 <- data.frame(cl = c("br", "be", "wh"),
tm = "cn")
2。将expand_grid
与tidyr::full_join
结合使用,将数据帧d1
扩展为所需的形式:
library(dplyr)
library(tidyr)
d1 %>%
full_join(expand_grid(d2, an = unique(d1$an)))
这回报:
an cl tm 1 c bl cl 2 d be an 3 c wh pl 4 c br cn 5 d br cn 6 c be cn 7 d be cn 8 c wh cn 9 d wh cn
使用crossing
library(dplyr)
library(tidyr)
crossing(d2, an = d1$an) %>%
full_join(d1)
Joining, by = c("cl", "tm", "an")
# A tibble: 9 × 3
cl tm an
<chr> <chr> <chr>
1 be cn c
2 be cn d
3 br cn c
4 br cn d
5 wh cn c
6 wh cn d
7 bl cl c
8 be an d
9 wh pl c
数据d1 <- structure(list(an = c("c", "d", "c"), cl = c("bl", "be", "wh"
), tm = c("cl", "an", "pl")), class = "data.frame", row.names = c(NA,
-3L))
d2 <- structure(list(cl = c("br", "be", "wh"), tm = c("cn", "cn", "cn"
)), class = "data.frame", row.names = c(NA, -3L))