R ifelse函数是否可以访问自身计算的值?
我的数据如下所示: 因此,在超过6的顺序中,周期_的所有值都被忽略。我想包括这些数据,让它看起来更像这样:R ifelse函数是否可以访问自身计算的值?,r,if-statement,R,If Statement,我的数据如下所示: 因此,在超过6的顺序中,周期_的所有值都被忽略。我想包括这些数据,让它看起来更像这样: HT2012 1 HT2012 HT2012 2 VT2013 HT2012 NA HT2013 HT2012 NA
HT2012 1 HT2012
HT2012 2 VT2013
HT2012 NA HT2013
HT2012 NA VT2014
HT2012 NA HT2014
HT2012 NA VT2015
HT2012 NA HT2015
HT2012 NA VT2016
HT2012 NA HT2016
HT2012 NA VT2017
[...]
HT2012 1 HT2013
HT2012 2 VT2014
HT2012 NA VT2014
[...]
我试图通过以下代码实现这一点:
HT2018resultat<-HT2018resultat%>%mutate(PERIOD_I_ORDNING=
ifelse(as.character(STARTPERIOD_KOD)==as.character(PERIOD_KOD),1,lag(PERIOD_I_ORDNING)+1))
这是否意味着ifelse语句不能访问由同一语句计算的值,如果是,我们如何补救
数据摘录:
structure(list(STARTPERIOD_KOD = structure(c(1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("HT2012",
"HT2013", "HT2014", "HT2015", "HT2016", "HT2017", "HT2018", "HT2019"
), class = "factor"), PERIOD_I_ORDNING = structure(c(2L, 3L,
4L, 5L, 6L, 7L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 3L, 4L,
5L, 6L, 7L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("-",
"1", "2", "3", "4", "5", "6"), class = "factor"), PERIOD_KOD = structure(c(1L,
2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L,
1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L,
15L), .Label = c("HT2012", "VT2013", "HT2013", "VT2014", "HT2014",
"VT2015", "HT2015", "VT2016", "HT2016", "VT2017", "HT2017", "VT2018",
"HT2018", "VT2019", "HT2019", "VT2020", "HT2020", "VT2021", "HT2021",
"VT2022", "HT2022", "VT2023", "HT2023", "VT2024", "HT2024", "VT2025",
"HT2025", "VT2026", "HT2026", "VT2027", "HT2027", "VT2028", "HT2028",
"VT2029", "HT2029", "VT2030", "HT2030"), class = c("ordered",
"factor"))), row.names = c(NA, 30L), class = "data.frame")
我不确定我是否完全理解您,但您可以尝试:
library(dplyr)
df %>%
group_by(STARTPERIOD_KOD) %>%
mutate(gr = cumsum(PERIOD_KOD == first(PERIOD_KOD))) %>%
group_by(gr, add = TRUE) %>%
mutate(ans = row_number()) %>%
ungroup %>%
select(-gr)
# STARTPERIOD_KOD PERIOD_I_ORDNING PERIOD_KOD ans
# <fct> <fct> <ord> <int>
# 1 HT2012 1 HT2012 1
# 2 HT2012 2 VT2013 2
# 3 HT2012 3 HT2013 3
# 4 HT2012 4 VT2014 4
# 5 HT2012 5 HT2014 5
# 6 HT2012 6 VT2015 6
# 7 HT2012 - HT2015 7
# 8 HT2012 - VT2016 8
# 9 HT2012 - HT2016 9
#10 HT2012 - VT2017 10
# … with 20 more rows
在这里,我们首先按STARTPERIOD_KOD对_进行分组,并创建一个新的分组变量,每当周期_KOD达到与组变量相同的值时,该变量就会重置 你有多个STARTPERIOD_KOD值,还是只有一个在数据中共享?多个,从HT2012开始,意思是2012年秋季学期到HT2019。我认为有一些方法可以使用访问因子级别作为数字,如果我没有多个起始值,我会尝试这样做!
structure(list(STARTPERIOD_KOD = structure(c(1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("HT2012",
"HT2013", "HT2014", "HT2015", "HT2016", "HT2017", "HT2018", "HT2019"
), class = "factor"), PERIOD_I_ORDNING = structure(c(2L, 3L,
4L, 5L, 6L, 7L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 3L, 4L,
5L, 6L, 7L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("-",
"1", "2", "3", "4", "5", "6"), class = "factor"), PERIOD_KOD = structure(c(1L,
2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L,
1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L,
15L), .Label = c("HT2012", "VT2013", "HT2013", "VT2014", "HT2014",
"VT2015", "HT2015", "VT2016", "HT2016", "VT2017", "HT2017", "VT2018",
"HT2018", "VT2019", "HT2019", "VT2020", "HT2020", "VT2021", "HT2021",
"VT2022", "HT2022", "VT2023", "HT2023", "VT2024", "HT2024", "VT2025",
"HT2025", "VT2026", "HT2026", "VT2027", "HT2027", "VT2028", "HT2028",
"VT2029", "HT2029", "VT2030", "HT2030"), class = c("ordered",
"factor"))), row.names = c(NA, 30L), class = "data.frame")
library(dplyr)
df %>%
group_by(STARTPERIOD_KOD) %>%
mutate(gr = cumsum(PERIOD_KOD == first(PERIOD_KOD))) %>%
group_by(gr, add = TRUE) %>%
mutate(ans = row_number()) %>%
ungroup %>%
select(-gr)
# STARTPERIOD_KOD PERIOD_I_ORDNING PERIOD_KOD ans
# <fct> <fct> <ord> <int>
# 1 HT2012 1 HT2012 1
# 2 HT2012 2 VT2013 2
# 3 HT2012 3 HT2013 3
# 4 HT2012 4 VT2014 4
# 5 HT2012 5 HT2014 5
# 6 HT2012 6 VT2015 6
# 7 HT2012 - HT2015 7
# 8 HT2012 - VT2016 8
# 9 HT2012 - HT2016 9
#10 HT2012 - VT2017 10
# … with 20 more rows