如何在R中为每个不同观测批量添加指定行集?优先使用tidyverse
R实现数据行批量追加方案
1. tidyverse 最优解法
核心思路是先提取所有唯一动物类别,和待追加的控制组表做笛卡尔积得到批量新增行,再和原表按行合并。
首先加载依赖包:
library(tidyverse)
构造示例数据(实际使用时替换为自己的数据集即可):
# 原观测表 df1 <- tibble( Animal = c("Cat", "Dog", "Cat"), Colour = c("Black", "Beige", "White"), Temperament = c("Calm", "Anxious", "Playful") ) # 待追加的控制组表 df2 <- tibble( Colour = c("Brown", "Beige", "White"), Temperament = rep("Control", 3) )
核心实现代码:
result <- df1 %>% bind_rows( # 提取唯一动物类别,和控制组表做笛卡尔积生成所有待追加行 distinct(df1, Animal) %>% crossing(df2) )
2. 基础R解法
无需加载第三方包,直接用基础函数实现:
# 提取唯一动物类别 unique_animal <- unique(df1$Animal) # 生成所有待追加的控制组行 append_df <- expand.grid( Animal = unique_animal, Colour = df2$Colour, Temperament = df2$Temperament, stringsAsFactors = FALSE ) # 合并原表和新增行 result <- rbind(df1, append_df)
两种方法输出的结果都和需求示例完全一致,会保留原表所有观测,同时为每个唯一动物追加控制组的全部行。
内容的提问来源于stack exchange,提问作者xoxo
相关产品推荐
相关产品推荐

