R:如何使用for循环通过多个数据帧对_进行变异和分组

R:如何使用for循环通过多个数据帧对_进行变异和分组,r,R,我对R很熟悉,但对于for循环,我是一个完全的新手 基本上,我对1977-2015年的当前人口调查数据进行了大约5000万次观察,我希望: A.按年度将所有数据子集 B.使用多个新变量对所有子集dfs进行变异 C.按州ID分组,并总结该州在该特定年份的几个变量的平均值 D.将我的新汇总数据重新组合在一起 我可以手动完成这项工作,但它非常重复,我希望我的代码更高效。以下是我如何手动实现的示例: FinalCPS<- load.csv("CPS") CPS1977 <- FinalCP

我对R很熟悉,但对于for循环,我是一个完全的新手

基本上,我对1977-2015年的当前人口调查数据进行了大约5000万次观察,我希望:

A.按年度将所有数据子集

B.使用多个新变量对所有子集dfs进行变异

C.按州ID分组,并总结该州在该特定年份的几个变量的平均值

D.将我的新汇总数据重新组合在一起

我可以手动完成这项工作,但它非常重复,我希望我的代码更高效。以下是我如何手动实现的示例:

FinalCPS<- load.csv("CPS")

CPS1977 <- FinalCPS %>% filter(YEAR==1977)

CPS1977 <- CPS1977 %>% mutate(newvar = ..)

CPS1977 <- CPS1977 %>% group_by(STATEID) %>%  summarise(mean(var1),mean(var1))

欢迎提供任何帮助。

您可以在group_by中添加更多变量,如果您有大型数据集,则不需要for loop。 你可以尝试这样的累计总和

library(data.table)
df <- data.table(df)
df[, Newvar1:= cumsum(var1), by = c("STATEID","YEAR")]

这使得处理大型数据集的方法更加有效。

这可能看起来有点复杂,将几个SO帖子拼凑在一起,因此可能不是最有效的方法,而是下载多个普查文件并将其读入表格的一种方法:

y<-1985
f<-"~/data/"
if (!dir.exists(f)) {dir.create(f)}
setwd(f)
while (y < 2016)  {
      y=y+1
      ty=substr(y,3,4)
      url<-paste0("https://www2.census.gov/programs-surveys/cbp/datasets/",y,"/cbp",ty,"st.zip")
      p<-basename(url)
      if (!file.exists(p)) {download.file(url = url,
                                          destfile = p,mode="wb")}
      library(plyr)
      # get all the zip files
      zipF <- list.files(path = f, pattern = "*.zip", full.names = TRUE)

      # unzip all your files
      ldply(.data = zipF, .fun = unzip, exdir = f)

      # clean up
      delfiles <- dir(path=f ,pattern=".zip")
      file.remove(file.path(f, delfiles))
}

list_of_files <- list.files(path = ".", recursive = TRUE,
                            pattern = "\\.txt$", 
                            full.names = TRUE)
library(data.table)

# Read all the files and create a FileName column to store filenames
DT <- rbindlist(sapply(list_of_files, fread, simplify = FALSE),
                use.names = TRUE, idcol = "FileName")
您必须进行最后一次推送,以获得您想要的群组信息。

您还应按年份分组,而不是逐个筛选。CPS1977%>%group\U BY STATEID,年份%>%SUMMARESEMN=meanvar1