【发布时间】:2019-12-07 06:42:09
【问题描述】:
我有一个包含多个代码的数据框。随着新信息进入市场,我想将数据添加到表格中。
df = data.frame(ticker = c(rep("AAPL", 2), rep("SPY", 2)), price = rnorm(4))
print(df)
ticker price
1 AAPL -0.6039186
2 AAPL -0.1661572
3 SPY -1.1038832
4 SPY 0.1755888
#New prices were discovered.
df.new = data.frame(ticker = c("AAPL", "SPY"), price = rnorm(2))
print(df.new)
ticker price
1 AAPL -0.1527394
2 SPY -0.5448376
我想在每个股票行尾插入这些。最终数据框应如下所示。
ticker price
1 AAPL -0.6039186 #original
2 AAPL -0.1661572 #original
3 AAPL -0.1527394 #new
4 SPY -1.1038832 #original
5 SPY 0.1755888 #original
6 SPY -0.5448376 #new
我最初是在尝试
df %>% group_by(ticker) %>% rbind(df.new)
在评论之后我尝试了这个并且它有效。这是你想这样做的方式吗?
df.final = rbind(df, df.new) %>% group_by(ticker) %>% sort(#in my case by date which I opted to leave out in the example)
【问题讨论】:
-
你尝试了什么?如果您遇到困难,我们可以提供帮助。这是一个基本的行绑定和排序。
-
嗨冻糕!谢谢!我想我是从阅读您的评论中弄清楚的。我添加了一些编辑。如果是我写的,请告诉我。
-
@JordanWrong - 是的,我觉得不错。如果您在 tidyverse 中工作,dpylr 中也有
bind_rows。 -
bind_rows(df, df.new) %>% arrange(ticker, date)应该可以工作。如果您已经在使用dplyr和朋友,我建议您使用bind_rows而不是rbind;虽然后者可以工作,但dplyr版本增加了明确的保护措施(包括重新排序列,如果它们不合适但仍然存在,rbind无法处理)。
标签: r group-by data.table tidyverse