【问题标题】:Use R to perform function on subsets of data AND full data使用 R 对数据子集和完整数据执行功能
【发布时间】:2021-07-27 02:29:04
【问题描述】:

我正在寻找一种简单的方法来对数据的子集以及对整个数据执行函数。到目前为止,代码设置为仅对数据的子集运行函数(子集按单位完成,例如美元、欧元等)。目标是在按单元子集的数据上运行该函数,但也在整个数据上运行该函数。我尝试修改的函数示例如下:

Country_freq_unit<-function(ind_unit){
  rm(H1,H2,H3,H4)
  
  H1<-data1 %>%
    filter(unit==ind_unit)   %>% 
    drop_na(data) %>% 
    group_by(country_name, time_date) %>% 
    tally()
  
  H2<-data1 %>% 
    select(country_name, time_date) %>% 
    group_by(country_name, time_date) %>% 
    tally() %>% 
    select(country_name, time_date)
  
  H3<-full_join(H2, H1) %>% 
    replace_na(list(n = 0))
  
  H4<-H3 %>% 
    spread(key='time_date', value='n')
  
  return(H4)
  
}

然后我在一个循环中执行该函数,该循环遍历我的数据中可用的所有单元。

unitlist<-unique(data$unit)
> unitlist
[1] "USD"  "OZT"  "XDR"  "RATE" "WK"  


for (s in unitlist) {  
  J1 = Country_freq_unit(s)
}

这部分一切正常,我的问题是是否有一种简单的方法可以向我的循环添加一个选项,以便在整个数据帧而不是数据帧的子集上执行该函数。我想知道在这种情况下是否有类似 all_of() 或everything() 的东西。

请注意,我实际上并没有在函数中编写代码(我只是帮助将函数和循环添加到现有代码中)。

感谢您的帮助!

【问题讨论】:

  • 如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。

标签: r function loops subset


【解决方案1】:

这是一种方法:

Country_freq_unit <- function(ind_unit = NULL){
  # you don't need the rm statement, and it's dangerous, so I've
  # deleted it.
  
  H1 <- data1
  if (! is.null(ind_unit)) {
    H1 <- H1 %>% filter(unit==ind_unit) 
  }

  H1 <- H1 %>% 
    drop_na(data) %>% 
    group_by(country_name, time_date) %>% 
    tally()
  
  H2 <- data1 %>% 
          select(country_name, time_date) %>% 
          group_by(country_name, time_date) %>% 
          tally() %>% 
          select(country_name, time_date)
  
  H3 <- full_join(H2, H1) %>% 
          replace_na(list(n = 0))
  
  H4 <- H3 %>% 
    spread(key = 'time_date', value = 'n')
  
  return(H4)
}

现在要为所有数据运行该函数,只需在不带ind_unit 参数的情况下调用它。您的函数中还有一些其他奇怪的东西,但我想这对于编写它的人来说是个问题......

【讨论】:

    猜你喜欢
    • 2019-03-13
    • 2019-08-13
    • 1970-01-01
    • 2022-07-06
    • 2020-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多