【问题标题】:R subset and sum without resorting to for loopR 子集和求和而不诉诸 for 循环
【发布时间】:2020-12-02 02:42:59
【问题描述】:

我有以下数据集:

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

其中第 1 到第 3 列具有一组固定值。我需要对这些固定值的所有可能组合进行子集化,然后将 column4 中剩余的数量相加。例如,如果我要一次执行一个,手动:

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
}

【问题讨论】:

    标签: r for-loop subset tidyverse


    【解决方案1】:

    您不妨试试下面的代码,看看它是否有效:

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

    如果它有效,请告诉我们!祝你好运

    【讨论】:

    • 澄清/更正更新:将它分配给一个新的 df 而不是前面提到的 yourdf ......所以 newdf
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 2020-07-13
    • 2021-06-23
    • 1970-01-01
    相关资源
    最近更新 更多