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

对于具有来自R中数据帧的多个参数的循环

对于具有来自R中数据帧的多个参数的循环,r,dataframe,date,lubridate,R,Dataframe,Date,Lubridate,我想知道是否有可能在R中构建一个FOR循环,它将在每次运行时更改多个参数 我有参数dataframe[df_params],如下所示: group person date_from date_to 1 Mike 2020-10-01 12:00:00 2020-10-01 13:00:00 2 Mike 2020-10-04 09:00:00 2020-10-07 17:00:00 3 Dave

我想知道是否有可能在R中构建一个FOR循环,它将在每次运行时更改多个参数

我有参数dataframe[df_params],如下所示:

group   person   date_from             date_to
1        Mike    2020-10-01 12:00:00   2020-10-01 13:00:00
2        Mike    2020-10-04 09:00:00   2020-10-07 17:00:00
3        Dave    2020-10-07 12:00:00   2020-10-07 13:00:00
4        Dave    2020-10-09 09:00:00   2020-10-11 17:00:00
person    datetime              books  tasks  done
Mike      2020-10-01 12:15:00   5      7      2 
Mike      2020-10-01 12:17:00   5      7      3 
Mike      2020-10-01 18:00:00   5      7      4 
Mike      2020-10-02 12:00:00   5      5      0 
Mike      2020-10-04 09:08:00   5      3      3 
Mike      2020-10-09 12:00:00   5      7      1 
Dave      2020-10-07 12:22:00   7      5      1 
Dave      2020-10-08 02:34:00   7      5      2 
Dave      2020-10-09 07:00:00   7      3      3 
Dave      2020-10-09 08:00:00   7      8      5 
Dave      2020-10-09 09:48:00   7      7      2 
Nick      2020-10-01 13:00:00   3      7      3 
Nick      2020-10-02 12:58:00   3      3      2 
Nick      2020-10-03 10:02:00   3      7      1 
person    datetime              books  tasks  done   group
Mike      2020-10-01 12:15:00   5      7      2      1
Mike      2020-10-01 12:17:00   5      7      3      1
Mike      2020-10-04 09:08:00   5      3      3      2
Dave      2020-10-07 12:22:00   7      5      1      3
Dave      2020-10-09 09:48:00   7      7      2      4
我想在更大的数据帧[df]上循环,只获取与“df_params”数据帧中各个行的参数匹配的行

大数据帧[df]如下所示:

group   person   date_from             date_to
1        Mike    2020-10-01 12:00:00   2020-10-01 13:00:00
2        Mike    2020-10-04 09:00:00   2020-10-07 17:00:00
3        Dave    2020-10-07 12:00:00   2020-10-07 13:00:00
4        Dave    2020-10-09 09:00:00   2020-10-11 17:00:00
person    datetime              books  tasks  done
Mike      2020-10-01 12:15:00   5      7      2 
Mike      2020-10-01 12:17:00   5      7      3 
Mike      2020-10-01 18:00:00   5      7      4 
Mike      2020-10-02 12:00:00   5      5      0 
Mike      2020-10-04 09:08:00   5      3      3 
Mike      2020-10-09 12:00:00   5      7      1 
Dave      2020-10-07 12:22:00   7      5      1 
Dave      2020-10-08 02:34:00   7      5      2 
Dave      2020-10-09 07:00:00   7      3      3 
Dave      2020-10-09 08:00:00   7      8      5 
Dave      2020-10-09 09:48:00   7      7      2 
Nick      2020-10-01 13:00:00   3      7      3 
Nick      2020-10-02 12:58:00   3      3      2 
Nick      2020-10-03 10:02:00   3      7      1 
person    datetime              books  tasks  done   group
Mike      2020-10-01 12:15:00   5      7      2      1
Mike      2020-10-01 12:17:00   5      7      3      1
Mike      2020-10-04 09:08:00   5      3      3      2
Dave      2020-10-07 12:22:00   7      5      1      3
Dave      2020-10-09 09:48:00   7      7      2      4
预期结果如下所示:

group   person   date_from             date_to
1        Mike    2020-10-01 12:00:00   2020-10-01 13:00:00
2        Mike    2020-10-04 09:00:00   2020-10-07 17:00:00
3        Dave    2020-10-07 12:00:00   2020-10-07 13:00:00
4        Dave    2020-10-09 09:00:00   2020-10-11 17:00:00
person    datetime              books  tasks  done
Mike      2020-10-01 12:15:00   5      7      2 
Mike      2020-10-01 12:17:00   5      7      3 
Mike      2020-10-01 18:00:00   5      7      4 
Mike      2020-10-02 12:00:00   5      5      0 
Mike      2020-10-04 09:08:00   5      3      3 
Mike      2020-10-09 12:00:00   5      7      1 
Dave      2020-10-07 12:22:00   7      5      1 
Dave      2020-10-08 02:34:00   7      5      2 
Dave      2020-10-09 07:00:00   7      3      3 
Dave      2020-10-09 08:00:00   7      8      5 
Dave      2020-10-09 09:48:00   7      7      2 
Nick      2020-10-01 13:00:00   3      7      3 
Nick      2020-10-02 12:58:00   3      3      2 
Nick      2020-10-03 10:02:00   3      7      1 
person    datetime              books  tasks  done   group
Mike      2020-10-01 12:15:00   5      7      2      1
Mike      2020-10-01 12:17:00   5      7      3      1
Mike      2020-10-04 09:08:00   5      3      3      2
Dave      2020-10-07 12:22:00   7      5      1      3
Dave      2020-10-09 09:48:00   7      7      2      4
在R中有可能发生这样的事情吗。
非常感谢您的建议。

如果您的数据集非常大,这可能是一个稍微昂贵的解决方案,但它会输出所需的结果

我不知道你的日期变量是否已经是日期格式;在下面,我用lubridate包转换它们,以防它们不是 此外,我还创建了变量
date\u interval
,稍后将用于过滤条件

library(dplyr)
library(lubridate)

# convert to date format
df_params <- df_params %>% 
  mutate(
    date_from = ymd_hms(date_from),
    date_to = ymd_hms(date_to),
    # create interval
    date_interval = interval(date_from, date_to)
    )

df <- df %>% 
  mutate(datetime = ymd_hms(datetime))

开始数据

df_params <- read.table(text="
group    person  date_from             date_to
1        Mike    2020-10-01T12:00:00   2020-10-01T13:00:00
2        Mike    2020-10-04T09:00:00   2020-10-07T17:00:00
3        Dave    2020-10-07T12:00:00   2020-10-07T13:00:00
4        Dave    2020-10-09T09:00:00   2020-10-11T17:00:00", header=T)

df <- read.table(text="
person    datetime              books  tasks  done
Mike      2020-10-01T12:15:00   5      7      2 
Mike      2020-10-01T12:17:00   5      7      3 
Mike      2020-10-01T18:00:00   5      7      4 
Mike      2020-10-02T12:00:00   5      5      0 
Mike      2020-10-04T09:08:00   5      3      3 
Mike      2020-10-09T12:00:00   5      7      1 
Dave      2020-10-07T12:22:00   7      5      1 
Dave      2020-10-08T02:34:00   7      5      2 
Dave      2020-10-09T07:00:00   7      3      3 
Dave      2020-10-09T08:00:00   7      8      5 
Dave      2020-10-09T09:48:00   7      7      2 
Nick      2020-10-01T13:00:00   3      7      3 
Nick      2020-10-02T12:58:00   3      3      2 
Nick      2020-10-03T10:02:00   3      7      1 ", header=T)

df_参数是您可以获得与参数中特定条件匹配的单独行。您是否需要根据个人的特定值在df中创建一个新列?您好,我需要创建一个只包含选定行的新数据框。好的,是的。听起来您想执行
merge()
union()
这是一种数据库类型的函数,您可以在其中获取两个数据集,并根据匹配条件将它们连接起来。您需要在行上匹配哪些标准?然后你告诉函数你希望它如何匹配,谢谢。它工作得很好!