【问题标题】:How to subset a data frame based on values in another data frame如何根据另一个数据框中的值对数据框进行子集化
【发布时间】:2020-02-25 13:49:04
【问题描述】:

我有一个数据框,其中包含对几个人的时间序列观察(由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 in data "equals" time 更改为:time in data "contains (the numbers before the decimal)" time,无需四舍五入两个数据集整数?

【问题讨论】:

  • 加入表格然后过滤怎么样?这也会是更快的方法。

标签: r tidyverse


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 2020-12-01
    • 1970-01-01
    相关资源
    最近更新 更多