【问题标题】:How to merge data frames and change element values based on certain conditions?如何根据特定条件合并数据框并更改元素值?
【发布时间】:2014-07-09 01:21:59
【问题描述】:

以下是我要合并的两个数据框的示例。

           portfolio_cost portfolio_value portfolio_return holding_period  closedate stock
2013-11-19          36.21           37.58      0.037834852              7 2013-11-29  MSFT
2013-12-12          36.68           36.90      0.005997819              9 2013-12-26  MSFT
2014-03-14          37.44           39.27      0.048878205              2 2014-03-18  MSFT
2014-04-10          39.08           40.58      0.038382805             11 2014-04-28  MSFT
2014-05-02          39.41           40.42      0.025628013              7 2014-05-13  MSFT

           portfolio_cost portfolio_value portfolio_return holding_period  closedate stock
2013-11-07          72.37           74.59       0.03067569              5 2013-11-14  AAPL
2013-12-18          77.78           80.51       0.03509900              3 2013-12-23  AAPL
2014-01-03          76.40           79.23       0.03704188              5 2014-01-10  AAPL
2014-04-04          75.55           77.42       0.02475182              1 2014-04-07  AAPL
2014-05-09          83.65           86.37       0.03251644              6 2014-05-19  AAPL
2014-06-20          90.91           92.93       0.02221978              6 2014-06-30  AAPL

我想做的是将两个数据框连接在一起,从而产生类似的结果......

    portfolio_cost  portfolio_value portfolio_return    holding_period  closedate   stock
11/7/2013   72.37   74.59   0.03067569  5   11/14/2013  AAPL
11/19/2013  36.21   37.58   0.037834852 7   11/29/2013  MSFT
12/12/2013  36.68   36.9    0.005997819 9   12/26/2013  MSFT
12/18/2013  77.78   80.51   0.035099    3   12/23/2013  AAPL
1/3/2014    76.4    79.23   0.03704188  5   1/10/2014   AAPL
3/14/2014   37.44   39.27   0.048878205 2   3/18/2014   MSFT
4/4/2014    75.55   77.42   0.02475182  1   4/7/2014    AAPL
4/10/2014   39.08   40.58   0.038382805 11  4/28/2014   MSFT
5/2/2014    39.41   40.42   0.025628013 7   5/13/2014   MSFT
5/9/2014    83.65   86.37   0.03251644  6   5/19/2014   AAPL
6/20/2014   90.91   92.93   0.02221978  6   6/30/2014   AAPL

如果有两个共同的日期,我希望它做这样的事情......

    portfolio_cost  portfolio_value portfolio_return    holding_period  closedate   stock
11/7/2013   72.37+36.21 74.59+37.58 VALUE   5   11/14/2013  AAPL-MSFT

【问题讨论】:

  • 请输入您的原始数据框,以便于使用。
  • 我认为有人为我做了这件事。太感谢了! stackexchange 的新成员!

标签: r merge dataframe


【解决方案1】:

这是一个 data.table 解决方案。我将这些数据框称为df1df2。我将第一个df2条目的日期更改为与df1中的第一个条目相同,否则没有共同日期。考虑到结束日期不同的情况,结果粘贴每个结束日期,以,分隔

library(data.table)
df1$Date <- rownames(df1)
df2$Date <- rownames(df2)
newdf <- rbind(df1,df2)
DT <- data.table(newdf)
DT[,list("portfolio_cost"=sum(portfolio_cost), "portfolio_value"=sum(portfolio_return), "holding_period"=sum(holding_period), "closedate"=paste(closedate,collapse=","), "stock"=paste(stock,collapse="-")),by=Date]

"holding_period"=paste(holding_period,collapse=",") 可能会提供更多信息。

【讨论】:

  • 我想知道生成的对象是什么?是数据框吗?出于某种原因,我无法像通常操作数据框那样操作生成的对象。我正在尝试将行名更改回日期,并删除日期列(只是个人喜好)。再次感谢你!这很有帮助
  • 这是一个data.table,你可以使用data.frame(DT)改回data.frame
  • 另外,您将如何按日期对整个表格进行排序?
猜你喜欢
  • 2020-01-19
  • 1970-01-01
  • 1970-01-01
  • 2020-12-21
  • 2021-11-24
  • 2023-02-23
  • 2020-04-24
  • 2022-01-18
  • 2011-03-30
相关资源
最近更新 更多