Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.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 避免if-else语句_R_If Statement - Fatal编程技术网

R 避免if-else语句

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

我有以下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 (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<最小(年)]