【问题标题】:Merge two data Sets & filling in mulitple fields based on one column in R合并两个数据集并根据 R 中的一列填充多个字段
【发布时间】:2018-02-22 18:22:27
【问题描述】:

好的,所以我有两个数组/表,我将在 TIMEDATE 合并。

我正在使用此代码:

Long_LA <- merge(x = LongArray,y = Long,by="TIMEDATE", all.x = TRUE)

这就是两者合并在一起的样子:

现在...我正在尝试根据 SegmentDuration_Seconds 为 X 行填写基于“Segment Activity”的活动代码。

我知道在 excel 中我只是填写,我知道在 R 中存在执行此操作的能力,但我无法让它工作。 有没有人可以帮助我?

【问题讨论】:

    标签: r loops merge row


    【解决方案1】:

    使用非 equi 连接 data.table 包可以更轻松地完成此操作,如下所示。更多解释内联

    #create the end timedate as well before non-equi join
    Long[, ENDTIMEDATE := STARTTIMEDATE + SEGMENTDURATION_SECONDS]
    
    #non-equi joins
    LongArray[Long, Activity_Code := SEGMENTACTIVITY, on=.(TIMEDATE >= STARTTIMEDATE, TIMEDATE <= ENDTIMEDATE)]
    

    数据:

    library(data.table)
    LongArray <- data.table(TIMEDATE=seq(as.POSIXct("2018-02-15"), by="1 min", length.out=14), 
        Order=1:14)
    Long <- data.table(STARTTIMEDATE=as.POSIXct("2018-02-15"), SEGMENTACTIVITY=1, SEGMENTDURATION_SECONDS=6300)
    

    【讨论】:

    • 我可以将 by = "1 min" 更改为 "1 seconds" 因为这需要在第二级
    • 另外...我在:=(ENDTIMEDATE, STARTTIMEDATE + SEGMENTDURATION_SECONDS) 中的第一个代码出现此错误:检查is.data.table(DT) == TRUE。否则,:= 和 :=(...) 被定义为在 j 中使用,仅一次且以特定方式使用。请参阅帮助(“:=”)。
    • 是的,您可以更改为 1 秒。这些表必须是 data.tables。您可以使用 setDT 将 data.frame 转换为 data.table
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 2015-11-20
    • 2021-08-06
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多