如何基于另一个数据帧中的时间间隔在一个数据帧中添加新列

德基

我有两个数据框。其中之一(df1)概述了在特定区域中检测到鱼时的情况。另一个总结了在这个特定区域中有潜水者的时期。举个例子:

datetime<- c("2016-08-01 06:00:02","2016-08-01 09:31:27","2016-08-01 13:34:02","2016-08-01 16:45:15","2016-08-02 09:07:12","2016-08-02 11:25:02","2016-08-02 17:25:02","2016-08-02 21:50:00")
df1<-data.frame(datetime)
df1$datetime<- as.POSIXct(df1$datetime, format = "%Y-%m-%d %H:%M:%S")
start<- c("2016-08-01 07:00:00","2016-08-01 08:30:00","2016-08-01 10:30:00","2016-08-01 16:00:00","2016-08-02 10:00:00","2016-08-02 16:00:00")
end<- c("2016-08-01 08:30:00","2016-08-01 10:00:00","2016-08-01 12:00:00","2016-08-01 17:30:00","2016-08-02 11:30:00","2016-08-02 17:30:00")
divers<-c(6,2,8,12,8,7)
df2<-data.frame(start,end,divers)
df2$start<- as.POSIXct(df2$start, format = "%Y-%m-%d %H:%M:%S")
df2$end<- as.POSIXct(df2$end, format = "%Y-%m-%d %H:%M:%S")

df1
        datetime
1 2016-08-01 06:00:02
2 2016-08-01 09:31:27
3 2016-08-01 13:34:02
4 2016-08-01 16:45:15
5 2016-08-02 09:07:12
6 2016-08-02 11:25:02
7 2016-08-02 17:25:02
8 2016-08-02 21:50:00

df2 # Notice there are four periods with divers on 2016-08-01 and only two on 2016-08-02.

            start               end         divers
1 2016-08-01 07:00:00 2016-08-01 08:30:00      6
2 2016-08-01 08:30:00 2016-08-01 10:00:00      2
3 2016-08-01 10:30:00 2016-08-01 12:00:00      8
4 2016-08-01 16:00:00 2016-08-01 17:30:00     12
5 2016-08-02 10:00:00 2016-08-02 11:30:00      8
6 2016-08-02 16:00:00 2016-08-02 17:30:00      7

我想在数据框df1的新列中添加有关潜水员存在的信息。在df1的这个新列中,我们将其称为“潜水员”,我想显示在检测到鱼时存在的潜水员的数量。如果根据df1提示存在鱼,则根据df2提示该区域中没有潜水员,则将“ df1 $ divers”加0。如果根据df1出现鱼,则有5个潜水员,则将5个添加到“ df1 $ divers”。作为我期望的示例:

datetime<- c("2016-08-01 06:00:02","2016-08-01 09:31:27","2016-08-01 13:34:02","2016-08-01 16:45:15","2016-08-02 09:07:12","2016-08-02 11:25:02","2016-08-02 17:25:02","2016-08-02 21:50:00")
divers<- c(0,2,0,12,0,8,7,0)
result<-data.frame(datetime,divers)
result$datetime<- as.POSIXct(result$datetime, format = "%Y-%m-%d %H:%M:%S")

result
             datetime divers
1 2016-08-01 06:00:02      0
2 2016-08-01 09:31:27      2
3 2016-08-01 13:34:02      0
4 2016-08-01 16:45:15     12
5 2016-08-02 09:07:12      0
6 2016-08-02 11:25:02      8
7 2016-08-02 17:25:02      7
8 2016-08-02 21:50:00      0

罗纳克·沙

使用基础R,我们可以使用sapplydatetimedf1,并找出哪些而是介于两者之间的时间startend时间df2,得到相应的diverssum他们。

df1$divers <- sapply(df1$datetime, function(x) 
                     sum(with(df2, divers[x >= start & x <= end])))

df1
#             datetime divers
#1 2016-08-01 06:00:02      0
#2 2016-08-01 09:31:27      2
#3 2016-08-01 13:34:02      0
#4 2016-08-01 16:45:15     12
#5 2016-08-02 09:07:12      0
#6 2016-08-02 11:25:02      8
#7 2016-08-02 17:25:02      7
#8 2016-08-02 21:50:00      0

我们可以使用dplyr/purrr替代与map_dbl

library(dplyr)
library(purrr)

df1 %>%
mutate(divers = map_dbl(datetime, ~ sum(with(df2, divers[. >= start & . <= end]))))

在OP的示例中sumdivers由于时间startend时间上没有重叠,因此没有必要这样做但是如果存在重叠,则最好sum在该时间段内添加所有潜水者。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

如何从另一个重复的数据帧更新一个数据帧

来自分类Dev

将新列从另一个数据帧添加到长数据帧?

来自分类Dev

如何基于另一个数据帧的索引在一个数据帧中创建“ ID”列?

来自分类Dev

基于R中另一个数据帧中的列填充数据帧中的列

来自分类Dev

如何基于R中的另一个数据帧重命名数据帧的所有列?

来自分类Dev

如何基于R中的另一个数据帧重命名数据帧的所有列?

来自分类Dev

检查一个数据帧中的行是否在另一个数据帧中

来自分类Dev

基于一个数据帧中的multiindex和另一个数据帧中的列,从两个数据帧中创建两个数据帧

来自分类Dev

如何基于另一个数据帧中唯一值的数量创建变量?

来自分类Dev

Pyspark:基于一个列值从另一个数据帧中减去一个数据帧

来自分类Dev

如何从另一个重复的数据帧更新一个数据帧

来自分类Dev

如何基于一个数据帧的行值是一个子字符串/包含在另一个数据帧的行值中来联接两个数据帧?

来自分类Dev

如何用另一个数据帧中的列注释一列

来自分类Dev

根据R中的两个匹配条件,将值从一个数据帧添加到另一个数据帧

来自分类Dev

如何提取数据帧的每一行并将解析的字符串从另一个数据帧添加到R中第一个数据帧的列

来自分类Dev

根据另一个数据帧中的值将数据帧的列相乘

来自分类Dev

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

来自分类Dev

查找一个数据帧中的一行出现在R中的另一个数据帧中的时间

来自分类Dev

如何在第一个数据帧中的另一个基于数据帧的列值中获取值的总和?

来自分类Dev

基于列中的某些值,更新另一个数据帧熊猫中的其他列

来自分类Dev

基于另一个数据帧从一个数据帧中的序列中删除字符串

来自分类Dev

将一个数据帧切片到另一个数据帧中

来自分类Dev

仅将数据帧中的新值附加到 Pandas 中的另一个数据帧

来自分类Dev

如何从另一个数据帧更新一个数据帧的特定列

来自分类Dev

如何从另一个数据帧中的列创建数据帧,该列用逗号“,”连接

来自分类Dev

如何从R中的另一个数据帧中提取数据帧

来自分类Dev

用基于索引的另一个数据帧中的行覆盖熊猫数据帧中的某些行

来自分类Dev

如何从 PySpark 中另一个数据帧的列中创建数据帧中的列

来自分类Dev

基于 Python 中另一个数据帧的行值从数据帧中获取列?

Related 相关文章

  1. 1

    如何从另一个重复的数据帧更新一个数据帧

  2. 2

    将新列从另一个数据帧添加到长数据帧?

  3. 3

    如何基于另一个数据帧的索引在一个数据帧中创建“ ID”列?

  4. 4

    基于R中另一个数据帧中的列填充数据帧中的列

  5. 5

    如何基于R中的另一个数据帧重命名数据帧的所有列?

  6. 6

    如何基于R中的另一个数据帧重命名数据帧的所有列?

  7. 7

    检查一个数据帧中的行是否在另一个数据帧中

  8. 8

    基于一个数据帧中的multiindex和另一个数据帧中的列,从两个数据帧中创建两个数据帧

  9. 9

    如何基于另一个数据帧中唯一值的数量创建变量?

  10. 10

    Pyspark:基于一个列值从另一个数据帧中减去一个数据帧

  11. 11

    如何从另一个重复的数据帧更新一个数据帧

  12. 12

    如何基于一个数据帧的行值是一个子字符串/包含在另一个数据帧的行值中来联接两个数据帧?

  13. 13

    如何用另一个数据帧中的列注释一列

  14. 14

    根据R中的两个匹配条件,将值从一个数据帧添加到另一个数据帧

  15. 15

    如何提取数据帧的每一行并将解析的字符串从另一个数据帧添加到R中第一个数据帧的列

  16. 16

    根据另一个数据帧中的值将数据帧的列相乘

  17. 17

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

  18. 18

    查找一个数据帧中的一行出现在R中的另一个数据帧中的时间

  19. 19

    如何在第一个数据帧中的另一个基于数据帧的列值中获取值的总和?

  20. 20

    基于列中的某些值,更新另一个数据帧熊猫中的其他列

  21. 21

    基于另一个数据帧从一个数据帧中的序列中删除字符串

  22. 22

    将一个数据帧切片到另一个数据帧中

  23. 23

    仅将数据帧中的新值附加到 Pandas 中的另一个数据帧

  24. 24

    如何从另一个数据帧更新一个数据帧的特定列

  25. 25

    如何从另一个数据帧中的列创建数据帧,该列用逗号“,”连接

  26. 26

    如何从R中的另一个数据帧中提取数据帧

  27. 27

    用基于索引的另一个数据帧中的行覆盖熊猫数据帧中的某些行

  28. 28

    如何从 PySpark 中另一个数据帧的列中创建数据帧中的列

  29. 29

    基于 Python 中另一个数据帧的行值从数据帧中获取列?

热门标签

归档