r - 展开一个系列,然后填充剩余的列
问题描述
我正在尝试扩展包含在数据框的一部分中的系列并重复其余列中的值以填充新行。我有一个需要使用的分组变量,然后重新组合以再次拥有一个数据框。这是我的意思的一个例子,以及我将如何分段进行:
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
,那么我不再一次对一组进行操作,并且我用错误的值填充新行(这些行不够)。
我确定我在这里遗漏了一些简单的东西......它是什么?
解决方案
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
推荐阅读
- python-3.x - Why my model field doesn't read the value of its ForeignKey, it returns its object number instead?
- go - 使用 Go 例程的 Golang 结束(Binance)Web 服务流
- node.js - 使用 NodeJS 后端在 EJS 中打印 JSON 对象
- c# - 如何使用 ComboBox 的值与 C# 中的 NumericUpDown 相乘?
- c++ - 谁能解释为什么 *var=i 是有效的
- excel - 在 Excel 中搜索日期和名称之间的数据
- c# - 使用 IIS 将 URL 重定向到 Fleck WebSocket
- python - 如何为“For Loop”运行 gevent 池?
- android - 上传文件 apollo android
- java - WSDL 到 Java 工件