【问题标题】:Is there an R function that can sum several variables from several data frames?是否有一个 R 函数可以对多个数据帧中的多个变量求和?
【发布时间】:2020-12-29 20:47:13
【问题描述】:

我有一个如下所示的数据:

此数据显示了世界上许多公司在哪里设有办事处。公司名称以字母和四位数字开头。

我想做的是创建两个变量来显示 (1) 每个国家在给定年份的公司总数和 (2) 每个国家和年份的公司总数,但仅与“国家第一个地址”。

现在,一个问题是数据非常大,并且以 15 个单独的 .csv 文件形式提供。数据适用于以下年份:2003 年、2007 年、2011 年、2015 年和 2019 年。每年三个 csv 文件。例如,对于 2003,我们有:data2003_part1.csv; data2003_part2 和 data2003_part3。

要创建上面的变量,我想我可以使用这样的东西:

 library(tidyverse)
 data_2003_part1 %>% group_by(Country of 1st ADDRESS) %>%
      summarise(B0100=sum(B0100,na.rm = T)) 

我不知道该怎么做是 1) 在所有公司的代码中指出,而不仅仅是像我在这里所做的那样 2) 代码可以在所有 15 个 csv 文件上运行。我想我需要先合并它们并添加年份变量?还是有其他方法?

【问题讨论】:

  • 请不要发布代码/数据/错误的图像:它不能被复制或搜索 (SEO),它会破坏屏幕阅读器,并且它可能不适合某些移动设备。参考:meta.stackoverflow.com/a/285557(和xkcd.com/2116)。请直接包含代码、控制台输出或数据(例如,data.frame(...) 或来自dput(head(x)) 的输出)。
  • 除非文件很大,否则我会首先为每个文件创建一个数据帧,然后将它们合并到一个数据帧中(使用rbindmerge 或其他)。将所有内容放在一个数据框中往往会节省分析时间。不过,有不止一种方法可以做到这一点。

标签: r tidyverse


【解决方案1】:

试试这样的:

library(dplyr)
library(tidyr)
#Code
myfun <- function(df)
{
  #Code
  new <- df %>%
    pivot_longer(starts_with('COUNTRY')) %>%
    group_by(name) %>%
    summarise_all(sum,na.rm=T)
  return(new)
}
#Load files
myfiles <- list.files(pattern = '.csv')
#List of files
L <- lapply(myfiles, read.csv)
#Apply function
L1 <- lapply(L,myfun)

在没有数据的情况下提供复杂的帮助。如有任何问题,请告诉我。

【讨论】:

  • 谢谢!我的错误是 sum 对因子没有意义。出于某种原因,公司名称的 0 和 1 是因素。我将尝试将它们设为数字,但需要找到相关代码而不将国家名称变量设为数字。我会尽快回复您。
猜你喜欢
  • 1970-01-01
  • 2020-05-27
  • 2019-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多