乘以两个数据帧

Din*_*air 1 r dataframe

在R中,我有2个数据帧"df1"和"df2".df1和df2如下.

>df1
  date      value
1 1990-10-10  3
2 1990-10-11  2.3
3 1990-10-12  2.5

>df2
  date      value
1 1990-10-10  3
2 1990-10-11  2
3 1990-10-12  2
Run Code Online (Sandbox Code Playgroud)

我需要第三个数据框"df3",它包含与df1和df2相同的列名.但是值字段应该是df1和df2中值的乘积.我期待以下输出

>df3
  date      value
1 1990-10-10  9
2 1990-10-11  4.6
3 1990-10-12  4
Run Code Online (Sandbox Code Playgroud)

R有可能吗?

Mat*_*erg 8

"合并"长途rbind,并用于aggregate生产产品:

aggregate(value ~ date, data=rbind(df1,df2), FUN=prod)
##         date value
## 1 1990-10-10   9.0
## 2 1990-10-11   4.6
## 3 1990-10-12   5.0
Run Code Online (Sandbox Code Playgroud)

如果您有数据框列的模式factor,则value必须转换为character然后numeric才能提取值:

df1$value <- as.factor(df1$value)
df2$value <- as.factor(df2$value)

aggregate(as.numeric(as.character(value)) ~ date, data=rbind(df1,df2), FUN=prod)
##         date as.numeric(as.character(value))
## 1 1990-10-10                             9.0
## 2 1990-10-11                             4.6
## 3 1990-10-12                             5.0
Run Code Online (Sandbox Code Playgroud)

你也可以转换as.numeric(levels(value))[value].详情?factor请见.

  • @DinoopNair,出于这个原因,我们通常建议使用`dput(YourData)`而不是像你在这里做的那样粘贴输出以及其他问题.看看你的其他一些问题,其他人之前曾要求你这样做,所以请在将来注意这个建议.谢谢. (2认同)

Ric*_*rta 5

如果所有日期都相同,那么您可以简单地使用:

df3 <- df1
df3$value <- as.numeric(as.character(df3$value))
df3$value <- df3$value * as.numeric(as.character(df2$value))
Run Code Online (Sandbox Code Playgroud)

如果两者的日期不相同data.frames,请使用@MatthewLundberg以下答案