Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用循环子集数据帧_R_Loops - Fatal编程技术网

R 使用循环子集数据帧

R 使用循环子集数据帧,r,loops,R,Loops,我想用一个循环将一个数据帧(Springs)按年份子集,并用年份重命名该数据集 Year.df <- matrix(nrow = 38, ncol = 1) Year.df[,1] <- 1982:2019 for(i in 1:38){ Springs.Year.df[i,1] <- subset(Springs, DayNum <= 43 & BookYear == Year.df[i,1]) } Year.df如果您提供了Springsdataset的示

我想用一个循环将一个数据帧(Springs)按年份子集,并用年份重命名该数据集

Year.df <- matrix(nrow = 38, ncol = 1)
Year.df[,1] <- 1982:2019

for(i in 1:38){
Springs.Year.df[i,1] <- subset(Springs, DayNum <= 43 & BookYear == Year.df[i,1])
}

Year.df如果您提供了
Springs
dataset的示例,那么解决您的问题就更容易了。
如果我正确理解了
Spring
dataset结构,您可以使用
dplyr
包,它可以轻松过滤您的数据集,而且对于
subset
函数,您无需执行
for loop

但是,如果要在
baseR
代码中使用
for循环
,则应循环使用
Springs
数据集,而不是
Year.df

以下代码涵盖了所有内容。(
dplyr
子集
用于lool

库(dplyr)

Year.df您可以使用dput(Springs[38,])函数制作一个可复制的示例。顺便说一句,之所以出现“Error:object”Springs.Year.df“not found.”是因为在环境中没有声明为“Springs.Year.df”的对象。如果您创建一个小的可复制示例以及预期的输出,将更容易提供帮助。了解。
library(dplyr)

Year.df <- matrix(nrow = 38, ncol = 1)
Year.df[,1] <- 1982:2019

# Creating an example dataset
Springs <- data.frame(
  DayNum = sample(10:100, 1000, replace = TRUE),
  BookYear = sample(1975:2021, 1000, replace = TRUE)
)

##------------------------------------------------
## dplyr, filter method
##------------------------------------------------  
Springs.Year.df <- Springs %>%
  filter(DayNum <= 43 & BookYear %in% Year.df)

#Result:

head(Springs.Year.df)
##   DayNum BookYear
## 1     31     2010
## 2     25     1982
## 3     29     1987
## 4     23     1985
## 5     17     1999
## 6     23     2005

nrow(Springs.Year.df)
## [1] 256



##-------------------------------------------------------------
## Subset method
##-------------------------------------------------------------

Springs.Year.df <- subset(Springs, DayNum <= 43 & BookYear %in% Year.df)


#Check the Result
head(Springs.Year.df)
##   DayNum BookYear
## 5     31     2010
## 7     25     1982
## 8     29     1987
## 17    23     1985
## 18    17     1999
## 22    23     2005

nrow(Springs.Year.df)
## [1] 256


##------------------------------------------------
## For loop method
##------------------------------------------------
Springs.Year.df <- data.frame()
#for loop for subsetting
for(i in 1:(nrow(Springs))){
  Day = ifelse(Springs$DayNum[i] <= 43, Springs$DayNum[i], "None")
  Year = ifelse(Springs$BookYear[i] %in% Year.df, Springs$BookYear[i], "None")
  if(Day != "None" & Year != "None"){
  to_add <- data.frame(DayNum = Day, BookYear = Year)
  Springs.Year.df <- rbind(to_add, Springs.Year.df)
  }
}


#Check the Result
head(Springs.Year.df)
##   DayNum BookYear
## 1     37     2018
## 2     41     2018
## 3     22     2013
## 4     35     2015
## 5     35     2007
## 6     23     2005
nrow(Springs.Year.df)
## [1] 256