有条件地在R中创建列

捷夫

在阅读了很多关于此的文章并尝试了针对我的数据的解决方案之后,我仍然没有得到理想的结果。基本上,我有一个data.frame带有两个时间列的:TimeStampStartTime一个用作事件标识符的列:ID我想创建第三列,如果使用ID == -999(表示非事件)则使用了该TimeStamp列,否则StartTime应使用。

更复杂一点:数据代表事件的“块”。在事件之间,有时间什么都不发生,即ID == -999在那种情况下,我希望该列由该块的第一个元素填充。

这是我的数据的简化版:

ID <- rep(c(84,-999,88),c(3,3,4))
f <- as.POSIXct("09:55:45", format = "%H:%M:%S")
t <- as.POSIXct("10:05:45", format = "%H:%M:%S")
TimeStamp <- seq.POSIXt(from = f, to = t, length.out = 10)
StartTime <- as.POSIXct(rep(c("09:54:12",NA,"10:02:25"),c(3,3,4)), format = "%H:%M:%S")
df <- data.frame(TimeStamp,StartTime,ID)

这是我想要的结果:

> df[,"Time"] <- rep(c("09:54","09:59","10:02"), c(3,3,4))
> df
#             TimeStamp           StartTime   ID  Time
#1  2015-04-13 09:55:45 2015-04-13 09:54:12   84 09:54
#2  2015-04-13 09:56:51 2015-04-13 09:54:12   84 09:54
#3  2015-04-13 09:57:58 2015-04-13 09:54:12   84 09:54
#4  2015-04-13 09:59:05                <NA> -999 09:59
#5  2015-04-13 10:00:11                <NA> -999 09:59
#6  2015-04-13 10:01:18                <NA> -999 09:59
#7  2015-04-13 10:02:25 2015-04-13 10:02:25   88 10:02
#8  2015-04-13 10:03:31 2015-04-13 10:02:25   88 10:02
#9  2015-04-13 10:04:38 2015-04-13 10:02:25   88 10:02
#10 2015-04-13 10:05:45 2015-04-13 10:02:25   88 10:02

我已经尝试过类似ifelse和的事情sapply它不是真的工作。到目前为止,我的解决方案是提取所有非事件(ID == -999)。然后使用另一个ID变量来标识所有唯一事件/非事件,aggregate以找到第一个TimeStampwithmin函数。然后,我有两个不同的Time,我联接使用该解决方案列它可行,但是我认为有一种更优雅,更直接的方法可以做到这一点。但是作为R新手,我还不能解决。

有什么建议?

顺便说一句:我希望它有点清楚,如果不是,请告诉我。

编辑:我不认为我的问题是重复的,因为这些答案在我的情况下不起作用。它不能解决我在上面试图解释的增加的复杂性。

大卫·阿伦堡

这是使用data.table v> = 1.9.5的可能解决方案(我-999在数据集的末尾添加了另一个事件,因为我了解您希望对它进行不同的处理)。

基本上,我只是使用新rleid函数创建一个新索引(并将其直接插入到by语句中),然后设置一个简单的if else语句

library(data.table)
setDT(df)[, Time := if(anyNA(StartTime)) {
                       format(TimeStamp[1L], "%H:%M") 
                      } else {
                       format(StartTime[1L], "%H:%M")
                      },
            by = rleid(ID)][]

#               TimeStamp           StartTime   ID  Time
#  1: 2015-04-13 09:55:45 2015-04-13 09:54:12   84 09:54
#  2: 2015-04-13 09:56:49 2015-04-13 09:54:12   84 09:54
#  3: 2015-04-13 09:57:54 2015-04-13 09:54:12   84 09:54
#  4: 2015-04-13 09:58:58                <NA> -999 09:58
#  5: 2015-04-13 10:00:03                <NA> -999 09:58
#  6: 2015-04-13 10:01:08                <NA> -999 09:58
#  7: 2015-04-13 10:02:12 2015-04-13 10:02:25   88 10:02
#  8: 2015-04-13 10:03:17 2015-04-13 10:02:25   88 10:02
#  9: 2015-04-13 10:04:21 2015-04-13 10:02:25   88 10:02
# 10: 2015-04-13 10:05:26 2015-04-13 10:02:25   88 10:02
# 11: 2015-04-13 10:06:31                <NA> -999 10:06
# 12: 2015-04-13 10:07:35                <NA> -999 10:06
# 13: 2015-04-13 10:08:40                <NA> -999 10:06
# 14: 2015-04-13 10:09:45                <NA> -999 10:06

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有条件地调用R中的特定列

来自分类Dev

通过在 R 中有条件地组合现有列来创建新列

来自分类Dev

有条件地从现有列中创建新列

来自分类Dev

R dplyr有条件地有效创建多个列

来自分类Dev

有条件地在分类列中创建“其他”类别

来自分类Dev

有条件地在R中选择多个列

来自分类Dev

在 R 中按组有条件地创建变量(写入函数)

来自分类Dev

有条件地删除R中的行

来自分类Dev

有条件地在R中命名值

来自分类Dev

有条件地填充 R 中的缺失数据

来自分类Dev

有条件地提取列

来自分类Dev

如何在R中的数据框中有条件地选择列

来自分类Dev

使用R有条件地替换数据框中的列值

来自分类Dev

有条件地用矩阵值替换data.frame列。R中的VLOOKUP

来自分类Dev

R根据另一列中的文本有条件地替换NA

来自分类Dev

R:有条件地删除矩阵中的行和列

来自分类Dev

如何有条件地更改R中的列的值?

来自分类Dev

有条件地用R计算列中的值数

来自分类Dev

使用R有条件地替换数据框中的列值

来自分类Dev

有条件地将列添加到 dplyr R 中的 groupby

来自分类Dev

有条件地将值添加到新列并替换R中的条件列中的值

来自分类Dev

使用data.table根据R中的B列,有条件地删除A列中匹配的行

来自分类Dev

基于 R 中列中的两个变量有条件地过滤组中的值

来自分类Dev

有条件地将值从R中的一列粘贴到另一列

来自分类Dev

使用data.table根据R中的B列有条件地删除A列中匹配的行

来自分类Dev

有条件地将嵌套(字符)列表中的项目排序/变异为R中的新列

来自分类Dev

如何根据R中其他列中的数据有条件地执行减法?

来自分类Dev

如何基于R中的列中的值有条件地执行许多Mann-Whitney测试?

来自分类Dev

在R?中的HeatMap GGPLOT2中使用之前,有条件地对列求和。

Related 相关文章

  1. 1

    有条件地调用R中的特定列

  2. 2

    通过在 R 中有条件地组合现有列来创建新列

  3. 3

    有条件地从现有列中创建新列

  4. 4

    R dplyr有条件地有效创建多个列

  5. 5

    有条件地在分类列中创建“其他”类别

  6. 6

    有条件地在R中选择多个列

  7. 7

    在 R 中按组有条件地创建变量(写入函数)

  8. 8

    有条件地删除R中的行

  9. 9

    有条件地在R中命名值

  10. 10

    有条件地填充 R 中的缺失数据

  11. 11

    有条件地提取列

  12. 12

    如何在R中的数据框中有条件地选择列

  13. 13

    使用R有条件地替换数据框中的列值

  14. 14

    有条件地用矩阵值替换data.frame列。R中的VLOOKUP

  15. 15

    R根据另一列中的文本有条件地替换NA

  16. 16

    R:有条件地删除矩阵中的行和列

  17. 17

    如何有条件地更改R中的列的值?

  18. 18

    有条件地用R计算列中的值数

  19. 19

    使用R有条件地替换数据框中的列值

  20. 20

    有条件地将列添加到 dplyr R 中的 groupby

  21. 21

    有条件地将值添加到新列并替换R中的条件列中的值

  22. 22

    使用data.table根据R中的B列,有条件地删除A列中匹配的行

  23. 23

    基于 R 中列中的两个变量有条件地过滤组中的值

  24. 24

    有条件地将值从R中的一列粘贴到另一列

  25. 25

    使用data.table根据R中的B列有条件地删除A列中匹配的行

  26. 26

    有条件地将嵌套(字符)列表中的项目排序/变异为R中的新列

  27. 27

    如何根据R中其他列中的数据有条件地执行减法?

  28. 28

    如何基于R中的列中的值有条件地执行许多Mann-Whitney测试?

  29. 29

    在R?中的HeatMap GGPLOT2中使用之前,有条件地对列求和。

热门标签

归档