R中的函数(合并基础)

时间:2017-03-01 04:34:06

标签: r

我在R中有以下基础。

table1<-data.frame(group=c(1,1,1,2,2,2),price=c(10,20,30,10,20,30),
                                       visits=c(100,200,300,150,250,350))

table1<-table1 %>% arrange(price) %>% split(.$group)

$`1`
    group price visits
1     1    10    100
3     1    20    200
5     1    30    300

 $`2`
    group price visits
2     2    10    150
4     2    20    250
6     2    30    350

group_1<-data.frame(case_1=c(0.2,0.3,0.4),case_2=c(0.22,0.33,0.44))
group_2<-data.frame(case_1=c(0.3,0.4,0.5),case_2=c(0.33,0.44,0.55))

所以,问题是如何在不重复四次的情况下进行以下操作。我认为应用函数或类似函数更适合。

sum(table1$`1`[,c("group")] * group_1[,c("case_1")])
sum(table1$`1`[,c("group")] * group_1[,c("case_2")])
sum(table2$`1`[,c("group")] * group_2[,c("case_1")])
sum(table2$`1`[,c("group")] * group_2[,c("case_2")])

2 个答案:

答案 0 :(得分:1)

逐步完成您提供的数据并了解您要执行的操作。以下是使用mapply的建议。

group_list <- list(group_1, group_2)
mapply(function(x, y) colSums(x * y),split(table1$group, table1$group),group_list)

#          1    2
#case_1 0.90 2.40
#case_2 0.99 2.64

我们将一组中的组称为group_list。按table1拆分group,然后使用mapply在它们之间进行相乘,并采用逐列求和。如果我理解正确的话,这就是你需要的,如果不是,请告诉我。

答案 1 :(得分:0)

基于初始数据集,我们可以使用group_by操作

来完成此操作
library(tidyverse)
bind_rows(group_1, group_2) %>% 
         bind_cols(table1['group'], .) %>% 
         mutate(case_1 = group*case_1, case_2 = group*case_2) %>% 
         group_by(group) %>% 
         summarise_each(funs(sum))
# A tibble: 2 × 3 
#   group case_1 case_2
#    <dbl>  <dbl>  <dbl>
#1     1    0.9   0.99
#2     2    2.4   2.64

数据

table1<-data.frame(group=c(1,1,1,2,2,2),price=c(10,20,30,10,20,30),
                                   visits=c(100,200,300,150,250,350))