我想使用循环按年份对数据框 (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])
}
我明白了:
<块引用>错误:找不到对象“Springs.Year.df”。
答案 0 :(得分:0)
如果您提供了 Springs
数据集的示例,那么解决您的问题会更容易。
如果我正确理解 Spring
数据集结构,您可以改用 dplyr
包,它可以轻松过滤您的数据集,同样对于 subset
函数,您不需要执行 for loop
.
但是如果你想在 for loop
代码中使用 baseR
,你应该循环遍历 Springs
数据集,而不是 Year.df
。
以下代码涵盖了所有。(dplyr
, subset
and for lool
)
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