如何将一组行添加到r中的每个不同的观测值中?



我希望在R中自动化以前手工完成的过程,并且非常耗时。我想将一系列从一个数据框观察到另一个数据框中的每个唯一变量。一个使用数据的例子可能会更好地说明这一点…

表1包含对每种动物的许多观察结果,我想在这个表中为每种类型的动物添加一组行。

tbody> <<tr>狗猫
动物 颜色 气质
黑色平静
米色焦虑
白色

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_gridtidyr::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))

最新更新