如何基于另一个数据帧中的值对数据帧进行子集

时间:2020-02-25 13:49:04

标签: r tidyverse

我有一个数据框,其中包含对几个人的时间序列观察(由ID标识)。它的结构如下:

>data
ID   time   Var1   Var2   Var3
a     1      …      …      …
a     2      …      …      …
a     3      …      …      …
a     4      …      …      …
… 
b     1      …      …      …
b     1      …      …      …
b     1      …      …      …
b     1      …      …      …
… 
I have another data frame `timedata` that contains one row for each `ID`, it is structured like this:
```r
>timedata
ID  time
a   200
b   250
c   278
…    … 

对于每个人,我想对第一个数据集data中的值进行子集化,其中time等于第二个数据集timedata中指定的时间。我通常会这样:

data2 <- 
  map2_df(timedata$ID, timedata$time, ~ 
            data%>%
            filter(ID == .x, time == .y))

但是,我的实数times带有小数点,并且由于记录器的不同,每个数据集中的小数点也不相同(但小数点前的数字相同)。如何更改此代码,使其从:time中的“ data”等于“ time”:time中的data包含(小数点前的数字) “ time,而没有将两个数据集都舍入为整数?

1 个答案:

答案 0 :(得分:0)

如果没有实际数据,很难验证。但是这里:

data %>%
  mutate(timeR=round(time)) %>%
  semi_join(
          mutate(timedata, timeR=round(time)),
    by=c("ID", "timeR")) %>%
  select(-timeR)