Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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如何检查上一期间是否存在值(滚动)_R - Fatal编程技术网

r如何检查上一期间是否存在值(滚动)

r如何检查上一期间是否存在值(滚动),r,R,这是我的数据集: structure(list(Date = structure(c(14609, 14609, 14609, 14609, 14699, 14699, 14699, 14699, 14790, 14790, 14790, 14790), class = "Date"), ID = structure(c(5L, 4L, 6L, 10L, 9L, 3L, 10L, 8L, 7L, 1L, 10L, 2L), .Label = c("B00NYQ2", "B03J9L7", "

这是我的数据集:

structure(list(Date = structure(c(14609, 14609, 14609, 14609, 14699, 14699, 14699, 14699, 14790, 14790, 14790, 14790), class = "Date"), 
ID = structure(c(5L, 4L, 6L, 10L, 9L, 3L, 10L, 8L, 7L, 1L, 
10L, 2L), .Label = c("B00NYQ2", "B03J9L7", "B05DZD1", "B06HC42", 
"B09V3X7", "B09YCC8", "X6114659", "X6478816", "X6556701", 
"X6812555"), class = "factor"), Name = structure(c(10L, 4L, 
9L, 8L, 7L, 3L, 8L, 6L, 2L, 5L, 8L, 1L), .Label = c("AIRA", 
"BOUS", "CSCS", "EVF", "GTB", "JER", "MGB", "MPR", "NVB", 
"TTNP"), class = "factor"), Score = c(55.075, 54.5, 53.325, 
52.175, 70.275, 69.825, 60.15, 60.025, 56.175, 52.65, 52.175, 
52.125), Score.rank = c(1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 
2L, 3L, 4L)), .Names = c("Date", "ID", "Name", "Score", "Score.rank"), row.names = c(1L, 2L, 3L, 4L, 71L, 72L, 73L, 74L, 156L, 157L, 158L, 159L), class = "data.frame")
当我们进入一个新的时期时,我试图找出哪些ID进出

我的意思是..我想比较ID是否出现在前一个时期,用“日期”表示

如果它存在于前一个期间(日期),则不应返回任何内容

如果上一期间不存在,则应返回“in”

我还想表明,如果在下一个期间不存在,它应该返回一个“OUT”。 即本期的出局应等于下一期的出局

我预期的数据帧应该是这样的

Date        ID         Name     Score   Score.rank  THIS PERIOD NEXT PERIOD
31/12/2009  B09V3X7    TTNP     55.075  1                        OUT
31/12/2009  B06HC42    EVF      54.5    2                        OUT
31/12/2009  B09YCC8    NVB      53.325  3                        OUT
31/12/2009  X6812555    MPR     52.175  4       
31/3/2010   X6556701    MGB     70.275  1              IN   
31/3/2010   B05DZD1     CSCS    69.825  2              IN        OUT
31/3/2010   X6812555    MPR     60.15   3       
31/3/2010   X6478816    JER     60.025  4              IN        OUT
30/6/2010   X6114659    BOUS    56.175  1              IN   
30/6/2010   B00NYQ2     GTB     52.65   2              IN   
30/6/2010   X6812555    MPR     52.175  3       
30/6/2010   B03J9L7     AIRA    52.125  4              IN   
有人能告诉我怎么做吗?
提前感谢

很遗憾,您的描述和示例不匹配。 考虑到您的描述,您似乎希望标记ID的进入和退出条件

可通过以下方式实现:

dft %>%
  group_by(ID) %>%
  dplyr::mutate( This_period = if_else(Date == min(Date), "IN", NULL) ) %>%
  dplyr::mutate( Next_period = if_else(Date == max(Date), "OUT", NULL))
并返回:

#Source: local data frame [12 x 7]
#Groups: ID [10]
#
#         Date       ID   Name  Score Score.rank This_period Next_period
#       <date>   <fctr> <fctr>  <dbl>      <int>       <chr>       <chr>
#1  2009-12-31  B09V3X7   TTNP 55.075          1          IN         OUT
#2  2009-12-31  B06HC42    EVF 54.500          2          IN         OUT
#3  2009-12-31  B09YCC8    NVB 53.325          3          IN         OUT
#4  2009-12-31 X6812555    MPR 52.175          4          IN        <NA>
#5  2010-03-31 X6556701    MGB 70.275          1          IN         OUT
#6  2010-03-31  B05DZD1   CSCS 69.825          2          IN         OUT
#7  2010-03-31 X6812555    MPR 60.150          3        <NA>        <NA>
#8  2010-03-31 X6478816    JER 60.025          4          IN         OUT
#9  2010-06-30 X6114659   BOUS 56.175          1          IN         OUT
#10 2010-06-30  B00NYQ2    GTB 52.650          2          IN         OUT
#11 2010-06-30 X6812555    MPR 52.175          3        <NA>         OUT
#12 2010-06-30  B03J9L7   AIRA 52.125          4          IN         OUT
#来源:本地数据帧[12 x 7]
#组别:ID[10]
#
#Date ID Name Score Score.rank此\u时段下一个\u时段
#                                 
#2009年12月31日B09V3X7 TTNP 55.075 1输入输出
#2 2009-12-31 B06HC42 EVF 54.500 2输入输出
#3 2009-12-31 B09YCC8 NVB 53.325 3输入输出
#4 2009-12-31 X6812555 MPR 52.175 4英寸
#5 2010-03-31 X6556701 MGB 70.275 1输入输出
#6 2010-03-31 B05DZD1 CSCS 69.825 2输入输出
#7 2010-03-31 X6812555 MPR 60.150 3
#8 2010-03-31 X6478816 JER 60.025 4输入输出
#9 2010-06-30 X6114659 BOUS 56.175 1输入输出
#10 2010-06-30 B00NYQ2 GTB 52.650 2输入输出
#11 2010-06-30 X6812555 MPR 52.175 3输出
#12 2010-06-30 B03J9L7 AIRA 52.125 4输入输出
但是,您的示例建议您将
min(Date)
本期检查中排除,将
max(Date)
下一期检查中排除。是这样吗?如果是,则
得分.排名是否与
日期相关?

请澄清

谢谢你。好的,让我试着重新发布数据。好的,如果有帮助的话,我扩展了数据集?你能用给定数据帧的预期输出更新吗?谢谢@Ronaksah添加了预期的数据帧输出。非常感谢@Aramis7d!为了回答你的问题,仔细想想,我认为它不必排除min(日期)和max(日期)。然而,我得到了2个错误,首先我得到了“错误:找不到函数”if_else“。然后,在将下划线删除为“ifelse”之后,我得到另一个错误:-错误:replacement的长度为零。另外:警告消息:In rep(no,length.out=length(ans)):“x”为NULL,因此结果将为NULL。你有没有想过为什么我会得到这个?再次感谢。有人请解释一下[Date==min(Date)]中的“min”和[Date==max(Date)]中的“max”的用法吗?提前感谢
?\u else
进入控制台会告诉您这是来自
dplyr
的功能,而
ifelse
来自
base
R。它们的工作方式不同
max
min
返回组内参数
Date
的相应最大值或最小值,我们将当前值与之进行比较。这确保我们检查ID的第一次或最后一次出现,并相应地对其进行标记。对于延迟回复@Aramis7d表示歉意。终于发现了问题所在。我的dplyr包未更新为包含“if_else”。一旦我更新了,它就工作得很好。再次感谢!