如何在特殊条件下合并2个数据帧[R]

如何在特殊条件下合并2个数据帧[R],r,dataframe,R,Dataframe,我有一个问题,它是复杂的解释,但我认为不难解决,但我是一个新手在R。。。希望你们能帮我 我有两个数据帧: -第一个包含一个带有Portfolio1的列 -第二个包含4列:日期、Portfolio2、模拟、值 每天对每个投资组合进行模拟,并获得一个值 我想创建一个新的表或数据框,在其中我有一天(这并不重要,因为输入数据只有一天)和每个投资组合的模拟值。因此,表中每个投资组合有一列,每个模拟有一行 值得一提的是,Portfolio1中会有Portfolio2中不存在的值。我将在新表中添加一个0的列

我有一个问题,它是复杂的解释,但我认为不难解决,但我是一个新手在R。。。希望你们能帮我

我有两个数据帧:

-第一个包含一个带有Portfolio1的列

-第二个包含4列:日期、Portfolio2、模拟、值

每天对每个投资组合进行模拟,并获得一个值

我想创建一个新的表或数据框,在其中我有一天(这并不重要,因为输入数据只有一天)和每个投资组合的模拟值。因此,表中每个投资组合有一列,每个模拟有一行

值得一提的是,Portfolio1中会有Portfolio2中不存在的值。我将在新表中添加一个0的列

提前谢谢

另外,我尝试使用comand merge将它们合并,但没有成功

输入数据如下所示:

Portfolio1
Port1
Port2
Port3

Date          Portfolio2      Simulation     Value
20150715      Port1           Simul1         12.6
20150715      Port1           Simul2         13.6
20150715      Port1           Simul3         14.6
20150715      Port1           Simul4         15.6
20150715      Port1           Simul5         16.6
20150715      Port3           Simul1         12.7
20150715      Port3           Simul2         13.7
20150715      Port3           Simul3         14.7
20150715      Port3           Simul4         15.7
20150715      Port3           Simul5         16.7
20150715      Port4           Simul1         12.8
20150715      Port4           Simul2         13.8
20150715      Port4           Simul3         14.8
20150715      Port4           Simul4         15.8
20150715      Port4           Simul5         16.8
以及由此产生的表格:

        Port1   Port3   Port2
Simul1  12.6    12.7    0
Simul2  13.6    13.7    0
Simul3  14.6    14.7    0
Simul4  15.6    15.7    0
Simul5  16.6    16.7    0

问题是我不知道确切的列数。它将根据给定的输入文件确定

我不确定我是否完全理解你的问题,但接下来是

要重新组织数据,使每个模拟有一行,每个投资组合有一列,可以使用
tidyr::spread
,如下例所示:

> library(tidyr)
> df1 <- data.frame(x=c(1,2,3,1,2,3), p=c(1,1,1,2,2,2), v = c(111,222,333,444,555,666))
> spread(df1, p, v)
  x   1   2
1 1 111 444
2 2 222 555
3 3 333 666
将所需的值添加到此列表中:

df3$v <- 0

也许最好忽略我答案的第二部分,这感觉不太对。使用spread重新组织data.frame是一个好主意。

显示示例输入数据和预期输出。我想说,
dplyr
包可能会对您有所帮助。使用
filter()
过滤案例(例如
filter(data.frame,Portfolio2=3)
),或者您可以对数据框进行分组,并使用摘要功能(
data.frame%>%groupby(Date,Portfolio2)%%>%summary(…)
。您是否有一些样本数据和预期结果的输出?这将有助于更准确地回答问题……如果@Tensibai指出,您添加了可以直接从您的问题中使用的数据(使用
dput
)然后在回答这个问题时,可以使用实际数据。这将提高答案的有用性。是的,你是对的。我应该提供数据。我不能提供实际数据,但我希望这会有所帮助。
df3$v <- 0
> rbind(df1, df3)
  x p   v
1 1 1 111
2 2 1 222
3 3 1 333
4 1 2 444
5 2 2 555
6 3 2 666
7 3 3   0
8 2 3   0
9 1 3   0