Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.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_Dataframe_Dplyr_Lubridate_Tibble - Fatal编程技术网

R 检查连续日期内的两个值是否相同

R 检查连续日期内的两个值是否相同,r,dataframe,dplyr,lubridate,tibble,R,Dataframe,Dplyr,Lubridate,Tibble,比如说我有一个像tibble一样的 df <- tribble( ~date, ~place, ~wthr, #------------/-----/-------- "2017-05-06","NY","sun", "2017-05-06","CA","cloud", "2017-05-07","NY&quo

比如说我有一个像tibble一样的

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"
)

有什么好办法吗?

要得到一个逻辑列,在按
place
分组后,在使用
lag
之前检查
wthr
值是否等于row。我为日期添加了
排列
,以确保按时间顺序排列

library(dplyr)

df %>%
  arrange(date) %>%
  group_by(place) %>%
  mutate(same = wthr == lag(wthr, default = NA))
编辑:如果要确保日期是连续的(相隔1天),可以包含一个
ifelse
,以查看
date
lag(date)
之间的差异是否为1。如果相隔不到1天,则可以将其编码为
NA

注意:另外,请确保您的日期是
日期

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))
df$date%
安排(日期)%>%
组别(地点)%>%
变异(相同=如果其他(
日期-滞后(日期)=1,
wthr==滞后(wthr,默认值=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   
日期地点相同
1 2017-05-06纽约州孙娜
2 2017-05-06加利福尼亚州
3 2017-05-07纽约太阳报真实版
4 2017-05-07 CA rain FALSE
5 2017-05-08纽约云假
6 2017-05-08加利福尼亚州真实降雨
7 2017-05-09纽约云真实
8 2017-05-09加利福尼亚州
9 2017-05-10纽约云真实
10 2017-05-10加利福尼亚州

如果整个第8行缺失(即
“2017-05-09”、“纽约”、“云”的下一行是
“2017-05-10”、“纽约”、“云”
),该怎么办?是否有办法使最后一行的
值与
NA
值相同,而不是
TRUE
?@hmje请参见编辑后的答案。您可以检查以确保两行间隔1天。如果不是,则编码为
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