比方说,我有点像
df <- tribble(
~date, ~place, ~wthr,
#------------/-----/--------
"2017-05-06","NY","sun",
"2017-05-06","CA","cloud",
"2017-05-07","NY","sun",
"2017-05-07","CA","rain",
"2017-05-08","NY","cloud",
"2017-05-08","CA","rain",
"2017-05-09","NY","cloud",
"2017-05-09","CA",NA,
"2017-05-10","NY","cloud",
"2017-05-10","CA","rain"
)
我想检查特定日期特定日期的天气是否与昨天相同,并将布尔值列附加到df
,以便
tribble(
~date, ~place, ~wthr, ~same,
#------------/-----/------/------
"2017-05-06","NY","sun", NA,
"2017-05-06","CA","cloud", NA,
"2017-05-07","NY","sun", TRUE,
"2017-05-07","CA","rain", FALSE,
"2017-05-08","NY","cloud", FALSE,
"2017-05-08","CA","rain", TRUE,
"2017-05-09","NY","cloud", TRUE,
"2017-05-09","CA", NA, NA,
"2017-05-10","NY","cloud", TRUE,
"2017-05-10","CA","rain", NA
)
有什么好方法吗?
要获得逻辑列,请在按分组wthr
后再使用前检查值是否等于row 。我添加了日期以确保按时间顺序排列。lag
place
arrange
library(dplyr)
df %>%
arrange(date) %>%
group_by(place) %>%
mutate(same = wthr == lag(wthr, default = NA))
编辑:如果要确保日期是连续的(相隔1天),则可以添加一个,ifelse
以查看date
和之间的差是否为1 lag(date)
。如果相隔1天不是一天,则可以将其编码为NA
。
注意:此外,请确保您的日期是Date
:
df$date <- as.Date(df$date)
df %>%
arrange(date) %>%
group_by(place) %>%
mutate(same = ifelse(
date - lag(date) == 1,
wthr == lag(wthr, default = NA),
NA))
输出量
date place wthr same
<chr> <chr> <chr> <lgl>
1 2017-05-06 NY sun NA
2 2017-05-06 CA cloud NA
3 2017-05-07 NY sun TRUE
4 2017-05-07 CA rain FALSE
5 2017-05-08 NY cloud FALSE
6 2017-05-08 CA rain TRUE
7 2017-05-09 NY cloud TRUE
8 2017-05-09 CA NA NA
9 2017-05-10 NY cloud TRUE
10 2017-05-10 CA rain NA
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句