我如何能够根据时间跟踪变化?确定条件首次出现的时间-R
如果我有一个数据集,随着时间的推移有不同的情况,那么跟踪变化的最佳方法是什么 比如说,我跟踪了墙壁的颜色是否随时间变化;想想天气破坏。在我开始跟踪或跟踪它的日期或时间上,我从来都不一致。我有两行墙,因为每行代表特定时间的测量值 对于我来说,什么是识别哪些墙在某一点上发生了变化的最好方法我如何能够根据时间跟踪变化?确定条件首次出现的时间-R,r,tidyverse,R,Tidyverse,如果我有一个数据集,随着时间的推移有不同的情况,那么跟踪变化的最佳方法是什么 比如说,我跟踪了墙壁的颜色是否随时间变化;想想天气破坏。在我开始跟踪或跟踪它的日期或时间上,我从来都不一致。我有两行墙,因为每行代表特定时间的测量值 对于我来说,什么是识别哪些墙在某一点上发生了变化的最好方法 Wall Color Date A yellow 2019-08 A white 2019-02 A yellow 2019-05 A yellow 2
Wall Color Date
A yellow 2019-08
A white 2019-02
A yellow 2019-05
A yellow 2019-05
A white 2019-04
A white 2019-03
A yellow 2019-08
B yellow 2019-09
B white 2019-05
B yellow 2020-09
B yellow 2020-05
c white 2019-05
c white 2018-01
c white 2020-06
c white 2019-02
c white 2020-03
c yellow 2020-09
c white 2020-06
c yellow 2020-05
c white 2019-01
c yellow 2020-1
您可以尝试:
library(dplyr)
df %>%
tidyr::separate(Date, c('Year', 'Month'), convert = TRUE) %>%
arrange(Wall, Year, Month) %>%
group_by(Wall) %>%
mutate(change = Color != lag(Color, default = first(Color)),
change = row_number() == which(change)[1])
# Wall Color Year Month change
# <chr> <chr> <int> <int> <lgl>
# 1 A white 2019 2 FALSE
# 2 A white 2019 3 FALSE
# 3 A white 2019 4 FALSE
# 4 A yellow 2019 5 TRUE
# 5 A yellow 2019 5 FALSE
# 6 A yellow 2019 8 FALSE
# 7 A yellow 2019 8 FALSE
# 8 B white 2019 5 FALSE
# 9 B yellow 2019 9 TRUE
#10 B yellow 2020 5 FALSE
# … with 11 more rows
库(dplyr)
df%>%
tidyr::单独(日期,c('Year','Month'),convert=TRUE)%>%
安排(墙、年、月)%>%
分组单位(墙)%>%
mutate(change=Color!=lag(Color,default=first(Color)),
更改=行号()==哪个(更改)[1])
#墙颜色年-月变化
#
#1白色2019 2假
#2白色2019 3假
#3 A白色2019 4错误
#4 A黄色2019 5正确
#5黄色2019 5假
#6黄色2019 8假
#7黄色2019 8假
#8 B白色2019 5假
#9 B黄色2019 9正确
#10 B黄色2020 5假
#…还有11排
我还没有弄清楚需要什么,但他的代码有点像R代码,它展示了如何执行一些我认为您尚未掌握的操作:
> dat <- scan( text="A yellow 2019-08
+ A white 2019-02
+ A yellow 2019-05
+ A yellow 2019-05
+ A white 2019-04
+ A white 2019-03
+ A yellow 2019-08
+ B yellow 2019-09
+ B white 2019-05
+ B yellow 2020-09
+ B yellow 2020-05
+ c white 2019-05
+ c white 2018-01
+ c white 2020-06
+ c white 2019-02
+ c white 2020-03
+ c yellow 2020-09
+ c white 2020-06
+ c yellow 2020-05
+ c white 2019-01
+ c yellow 2020-1", what=list(grp="",color="",mon=""))
Read 21 records
> dat=data.frame(dat)
> dat
grp color mon
1 A yellow 2019-08
2 A white 2019-02
3 A yellow 2019-05
4 A yellow 2019-05
5 A white 2019-04
6 A white 2019-03
7 A yellow 2019-08
8 B yellow 2019-09
9 B white 2019-05
10 B yellow 2020-09
11 B yellow 2020-05
12 c white 2019-05
13 c white 2018-01
14 c white 2020-06
15 c white 2019-02
16 c white 2020-03
17 c yellow 2020-09
18 c white 2020-06
19 c yellow 2020-05
20 c white 2019-01
21 c yellow 2020-1
> library(zoo)
> dat$mon<-as.yearmon(dat$mon)
> plot(as.numeric(dat$color)~dat$mon)
> plot(as.numeric(dat$color)~dat$mon, type="b")
> png();
plot(jitter(as.numeric(dat$color)) ~dat$mon, type="b", col=as.numeric(dat$grp));
dev.off()
dat dat=数据帧(dat)
>dat
玻璃钢色板
1 A黄色2019-08
2 A白色2019-02
3 A黄色2019-05
4 A黄色2019-05
5 A白色2019-04
6 A白色2019-03
7 A黄色2019-08
8 B黄色2019-09
9 B白色2019-05
10 B黄色2020-09
11 B黄色2020-05
12 c白色2019-05
13 c白色2018-01
14 c白色2020-06
15 c白色2019-02
16 c白色2020-03
17 c黄色2020-09
18 c白色2020-06
19 c黄色2020-05
20 c白色2019-01
21 c黄色2020-1
>图书馆(动物园)
>dat$mon绘图(如数字(dat$color)~dat$mon)
>绘图(如.numeric(dat$color)~dat$mon,type=“b”)
>png();
绘图(抖动(作为数值(dat$color))~dat$mon,type=“b”,col=as.numeric(dat$grp));
发展主任()
我认为,这表明您尚未对问题进行足够详细的描述,以便做出一致的响应。部分原因在于此!我想我只希望每个“墙”都有一个真的,所以只要确定它改变的日期就可以了。因此,如果它在2020-03年变为黄色,那么只有2020-03年才会被标记为“墙”A。好的。请参阅更新的答案,以获得每个
墙的第一个TRUE
。我想这里也应该考虑Date
。更新的答案应该会有帮助。谢谢!出于好奇,将月份和年份分开的原因是什么?因为2019-08
是一个字符值,而R不理解它为日期。所以我们有两种选择:1)分为月份和年份,2)转换为日期。我们可以选择任何一个选项,但我选择了1。哦,好的。是否有办法修改此项以跟踪增加/减少?在这个例子中,我知道在分类中的变化,但在连续变化的情况下。或者这需要一个完全不同的代码?