首页 > 解决方案 > 展开一个系列,然后填充剩余的列

问题描述

我正在尝试扩展包含在数据框的一部分中的系列并重复其余列中的值以填充新行。我有一个需要使用的分组变量,然后重新组合以再次拥有一个数据框。这是我的意思的一个例子,以及我将如何分段进行:

df <- data.frame("group" = c(rep("A",3),rep("B",3)), val=rep(c(1,3,5),2))
values <- data.frame(val=seq(1:5))

df2.a <- df[df$group=="A",]
df3.a <- right_join(df2.a, values, "val")
df3.a$group <- "A"

df2.b <- df[df$group=="B",]
df3.b <- right_join(df2.b, values, "val")
df3.b$group <- "B"

df4 <- rbind(df3.a, df3.b)

df4是我想要的输出。

但我确信我可以更有效地使用dplyr或其他一些拆分应用组合方法,尽管我显然遗漏了一些东西。

从概念上讲,这对我来说很有意义:

df.interp <- df %>%
  group_by(group) %>%
  full_join(x=., y=values, by="val") %>%
  fill(group)

虽然我无法在这里完成最后一行,因为我无法编辑分组变量。但是如果 I ungroup,那么我不再一次对一组进行操作,并且我用错误的值填充新行(这些行不够)。

我确定我在这里遗漏了一些简单的东西......它是什么?

标签: rdplyr

解决方案


Adding a data.table option.

Define a helper function

f <- function(x) {
  tmp <- range(x)
  tmp[1]:tmp[2]
}

Apply f by group

library(data.table)
out <- setDT(df)[, .(val = f(val)), by=group]
out
#    group val
# 1:     A   1
# 2:     A   2
# 3:     A   3
# 4:     A   4
# 5:     A   5
# 6:     B   1
# 7:     B   2
# 8:     B   3
# 9:     B   4
#10:     B   5

推荐阅读