R子集和求和,而不求助于for循环

问题描述

我有以下数据集:

      col1    col2    col3    col4
row1    x     True    Yes      0.4
row1    y     False   No       0.3
row1    z     True    Yes      0.5

第1到第3列具有一组固定的值。我需要对这些固定值的所有可能组合进行子集化,然后对第4列中剩余的金额求和。例如,如果我一次要这样做,请手动:

subset1 <- data %>% 
  filter(col1 == 'x' & col2== True & col3== 'Yes') %>%
  pull(col4) %>%
  sum

subset2 <- data %>% 
  filter(col1 == 'y' & col2== False & col3== 'No') %>%
  pull(col4) %>%
  sum

subset3 <- data %>% 
  filter(col1 == 'z' & col2== True & col3== 'Yes') %>%
  pull(col4) %>%
  sum

但是,实际的数据集包含十二个列,每个列都有大约十二个值的固定列表。手动设置这些子集将需要几百行几乎相同的代码。有没有一种方法可以通过简单的功能生成这些子表?类似于:

list1 <- c('x','y','z')
list2 <- c(True,False)
list3 <- c("Yes","No")


f1 <- function(data,list1,list2,list3){
  table <- timeline %>% 
    filter(col1 %in% list1 & col2 %in% list2 & col3 %in% list3) %>%
    pull(col4) %>%
    sum
}

解决方法

您可能想尝试以下代码,看看它是否有效:

yourdf <- yourdf%>%
  group_by(yourColumn)%>%
  summarize(newColumn=sum(columnTobeSummed))

让我们知道它是否有效!祝你好运