R 避免if-else语句
我有以下ifelse声明:R 避免if-else语句,r,if-statement,R,If Statement,我有以下ifelse声明: Years=c(2016, 2021, 2026, 2031, 2035) if (Year == Years[1]){OD = subset(data,data$YEAR>=Years[1] & data$YEAR <= Years[1]+2)} if (Year == Years[2]){OD = subset(data,data$YEAR>=Years[2]-2 & data$YEAR <= Years[2]+2)} if
Years=c(2016, 2021, 2026, 2031, 2035)
if (Year == Years[1]){OD = subset(data,data$YEAR>=Years[1] & data$YEAR <= Years[1]+2)}
if (Year == Years[2]){OD = subset(data,data$YEAR>=Years[2]-2 & data$YEAR <= Years[2]+2)}
if (Year == Years[3]){OD = subset(data,data$YEAR>=Years[3]-2 & data$YEAR <= Years[3]+2)}
if (Year == Years[4]){OD = subset(data,data$YEAR>=Years[4]-2 & data$YEAR <= Years[4]+2)}
if (Year == Years[5]){OD = subset(data,data$YEAR>=Years[5]-1 & data$YEAR <= Years[5])}
Years=c(2016年、2021年、2026年、2031年、2035年)
如果(Year==Years[1]){OD=subset(data,data$Year>=Years[1]&data$Year=Years[2]-2&data$Year=Years[4]-2&data$Year=Years[5]-1&data$Year我不确定定义年份上下限的规则是什么,但是首先创建定义上下限的向量如何:
Years <- c(2016, 2021, 2026, 2031, 2035)
Years.lower <- c(2016, 2021-2, 2026-2, 2031-2, 2035-1)
Years.upper <- c(2016+2, 2021+2, 2026+2, 2031+2, 2035)
我不确定定义年份下限和上限的规则是什么,但首先创建定义下限和上限的向量如何:
Years <- c(2016, 2021, 2026, 2031, 2035)
Years.lower <- c(2016, 2021-2, 2026-2, 2031-2, 2035-1)
Years.upper <- c(2016+2, 2021+2, 2026+2, 2031+2, 2035)
据我所知,您正在以第一个数据点为中心,对数据进行5年的切片,最后一个数据点有一个上限,因此我希望这能起到作用:
Years=c(2016, 2021, 2025) # shortenned for the demo
set.seed(1)
data = data.frame(Year = sample(2010:2030,20,replace=TRUE),anything=sample(letters,20,replace=TRUE))
# Year anything
# 1 2015 y
# 2 2017 f
# 3 2022 q
# 4 2029 d
# 5 2014 g
# 6 2028 k
# 7 2029 a
# 8 2023 j
# 9 2023 w
# 10 2011 i
# 11 2014 m
# 12 2013 p
# 13 2024 m
# 14 2018 e
# 15 2026 v
# 16 2020 r
# 17 2025 u
# 18 2030 c
# 19 2017 s
# 20 2026 k
# for all of the years of your data we assign a number, the id of the slice it'll be attributed to
group0 <- (data$Year - (min(Years)-7)) %/% 5
# it can contain negative numbers and slices after your max year though so we fix that
group0[data$Year > max(Years) | data$Year < min(Years) ] <- NA
# now we can assign a group to all your rows
data$group <- Years[group0]
# Year anything group
# 1 2015 y 2016
# 2 2017 f 2016
# 3 2022 q 2021
# 4 2029 d NA
# 5 2014 g 2016
# 6 2028 k NA
# 7 2029 a NA
# 8 2023 j 2021
# 9 2023 w 2021
# 10 2011 i NA
# 11 2014 m 2016
# 12 2013 p NA
# 13 2024 m 2025
# 14 2018 e 2016
# 15 2026 v NA
# 16 2020 r 2021
# 17 2025 u 2025
# 18 2030 c NA
# 19 2017 s 2016
# 20 2026 k NA
# and subset it
OD_list <- lapply(Years,function(x){subset(data,group == x)})
# [[1]]
# Year anything group
# 1 2015 y 2016
# 2 2017 f 2016
# 5 2014 g 2016
# 11 2014 m 2016
# 14 2018 e 2016
# 19 2017 s 2016
#
# [[2]]
# Year anything group
# 3 2022 q 2021
# 8 2023 j 2021
# 9 2023 w 2021
# 16 2020 r 2021
#
# [[3]]
# Year anything group
# 13 2024 m 2025
# 17 2025 u 2025
Years=c(2016、2021、2025)#为演示缩短了时间
种子(1)
data=data.frame(Year=sample(2010:2030,20,replace=TRUE),anything=sample(字母,20,replace=TRUE))
#什么年
#2015年1月
#2017年2月f日
#2022年第3季度
#42029D
#5 2014克
#62028K
#2029年7月a日
#8 2023 j
#9 2023西
#2011年10月1日
#2014年11月
#12 2013页
#13 2024米
#14 2018 e
#15 2026 v
#16 2020 r
#17 2025年美国
#18摄氏度
#2017年9月19日
#2026K
#对于您的数据的所有年份,我们都分配了一个数字,即它将归属于的切片的id
group0 max(Years)| data$Year
Years=c(2016, 2021, 2025) # shortenned for the demo
set.seed(1)
data = data.frame(Year = sample(2010:2030,20,replace=TRUE),anything=sample(letters,20,replace=TRUE))
# Year anything
# 1 2015 y
# 2 2017 f
# 3 2022 q
# 4 2029 d
# 5 2014 g
# 6 2028 k
# 7 2029 a
# 8 2023 j
# 9 2023 w
# 10 2011 i
# 11 2014 m
# 12 2013 p
# 13 2024 m
# 14 2018 e
# 15 2026 v
# 16 2020 r
# 17 2025 u
# 18 2030 c
# 19 2017 s
# 20 2026 k
# for all of the years of your data we assign a number, the id of the slice it'll be attributed to
group0 <- (data$Year - (min(Years)-7)) %/% 5
# it can contain negative numbers and slices after your max year though so we fix that
group0[data$Year > max(Years) | data$Year < min(Years) ] <- NA
# now we can assign a group to all your rows
data$group <- Years[group0]
# Year anything group
# 1 2015 y 2016
# 2 2017 f 2016
# 3 2022 q 2021
# 4 2029 d NA
# 5 2014 g 2016
# 6 2028 k NA
# 7 2029 a NA
# 8 2023 j 2021
# 9 2023 w 2021
# 10 2011 i NA
# 11 2014 m 2016
# 12 2013 p NA
# 13 2024 m 2025
# 14 2018 e 2016
# 15 2026 v NA
# 16 2020 r 2021
# 17 2025 u 2025
# 18 2030 c NA
# 19 2017 s 2016
# 20 2026 k NA
# and subset it
OD_list <- lapply(Years,function(x){subset(data,group == x)})
# [[1]]
# Year anything group
# 1 2015 y 2016
# 2 2017 f 2016
# 5 2014 g 2016
# 11 2014 m 2016
# 14 2018 e 2016
# 19 2017 s 2016
#
# [[2]]
# Year anything group
# 3 2022 q 2021
# 8 2023 j 2021
# 9 2023 w 2021
# 16 2020 r 2021
#
# [[3]]
# Year anything group
# 13 2024 m 2025
# 17 2025 u 2025
Years=c(2016、2021、2025)#为演示缩短了时间
种子(1)
data=data.frame(Year=sample(2010:2030,20,replace=TRUE),anything=sample(字母,20,replace=TRUE))
#什么年
#2015年1月
#2017年2月f日
#2022年第3季度
#42029D
#5 2014克
#62028K
#2029年7月a日
#8 2023 j
#9 2023西
#2011年10月1日
#2014年11月
#12 2013页
#13 2024米
#14 2018 e
#15 2026 v
#16 2020 r
#17 2025年美国
#18摄氏度
#2017年9月19日
#2026K
#对于您的数据的所有年份,我们都分配了一个数字,即它将归属于的切片的id
组0最大(年)|数据$Year<最小(年)]