首页 文章

乘以两个数据帧

提问于
浏览
1

在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

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

>df3
  date      value
1 1990-10-10  9
2 1990-10-11  4.6
3 1990-10-12  4

R有可能吗?

4 回答

  • 3

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

    df3 <- df1
    df3$value <- as.numeric(as.character(df3$value))
    df3$value <- df3$value * as.numeric(as.character(df2$value))
    

    如果日期在两个 data.frames 中不相同,请使用下面的 @MatthewLundberg 回答

  • 8

    "Merge"与 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
    

    如果数据框的 value 列的模式为 factor ,则必须转换为 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
    

    您也可以使用 as.numeric(levels(value))[value] 进行转换 . 有关详细信息,请参见 ?factor .

  • 5

    也许你可以先 data.frame 然后继续 transform

    > temp <- merge(df1, df2, by = "date")
    > temp
            date value.x value.y
    1 1990-10-10     3.0       3
    2 1990-10-11     2.3       2
    3 1990-10-12     2.5       2
    > transform(temp, Prod = value.x * value.y)
            date value.x value.y Prod
    1 1990-10-10     3.0       3  9.0
    2 1990-10-11     2.3       2  4.6
    3 1990-10-12     2.5       2  5.0
    

    这里,由于两个 data.frame 具有相同的列名,我已经指定我们只想通过"date"变量进行合并,以便"temp" data.frame 中存在两个"value"变量 .

  • 2

    在你解决了df1和df2的问题之后你会在尝试这个之前尝试使用类型因素的“值”,你可以做到这一点:

    df3 <- data.frame( data=df1$date, value=df1[ ,"value"]*df2[ ,"value"])
    

    R-FAQ中包含了应该是数字因子的转换:FAQ 7.10

相关问题