每 3 行合并两个数据

Combine two data by every 3rd row

我有以下两个数据框:

df<- structure(t(data.frame(x=1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10)))
df2<- structure(data.frame(x= rep(30, times=10)))

我希望合并这两个数据框,以便 df2 的一行插入到 df 上的每三个点中。所以最终的数据框应该是这样的:

df3<- structure(t(data.frame(x=1,1,30,2,2,30,3,3,30,4,4,30,5,5,30,6,6,30,7,7,30,8,8,30,9,9,30,10, 10,30)))

这可以通过为每个数据框创建一个分组变量来完成。喜欢:

df$group<- rep(1:10, times=2) %>% arrange(group)

df2$group<- rep(1:10)

然后根据分组进行合并,但是df中我的行的顺序很重要,不能调换。

如有任何帮助,我们将不胜感激

我们可以通过将两个数据框与客户排序顺序连接在一起来做到这一点。

类似于以下内容:

df<- structure(t(data.frame(x=1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10)))
df2<- structure(data.frame(x= rep(30, times=10)))

# current row orders
df = df %>%
  mutate(row_number = 1:nrow(df),
         source = "df")
df2 = df2 %>%
  mutate(row_number = 1:nrow(df2),
         source = "df2")

# prep customer sorters
df2 = df2 %>% mutate(row_number = 2 * row_number + 0.5)

# attend and sort
df3 = rbind(df, df2) %>%
  arrange(row_number)

# remove extra columns
df3 = df3 %>%
  select(-row_number, -source)

大多数聪明之处都发生在客户分类器中:row_number = 2 * row_number + 0.5 of df2

  • 添加 0.5 确保 df2 行出现在 df 行之间。
  • 乘以2表示df2
  • 的每一行之间从df开始有两行
  • 获取当前行顺序意味着保留 dfdf2 的行顺序。