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