Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.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 ifelse函数是否可以访问自身计算的值?_R_If Statement - Fatal编程技术网

R ifelse函数是否可以访问自身计算的值?

R ifelse函数是否可以访问自身计算的值?,r,if-statement,R,If Statement,我的数据如下所示: 因此,在超过6的顺序中,周期_的所有值都被忽略。我想包括这些数据,让它看起来更像这样: HT2012 1 HT2012 HT2012 2 VT2013 HT2012 NA HT2013 HT2012 NA

我的数据如下所示:

因此,在超过6的顺序中,周期_的所有值都被忽略。我想包括这些数据,让它看起来更像这样:

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