【发布时间】:2019-05-13 01:09:31
【问题描述】:
我想从另一个中减去一个 R data.table。我有一个匹配列的列表,以及一个要进行减法运算的列列表。
dt1 <- data.table(read.table(header=T, text=
"Date Code ColumnA ColumnB Session
01/01/2013 AB 0 5 PRE
01/01/2013 CJ 15 25 PRE
01/01/2013 JJ 20 20 PRE
02/01/2013 JJ 25 15 PRE"))
dt2 <- data.table(read.table(header=T, text=
"Date Code ColumnA ColumnB Session
01/01/2013 BB 15 25 POST
01/01/2013 AB 1 2 POST
02/01/2013 AB 25 15 POST
02/01/2013 JJ 35 15 POST"))
matchingCols <- c("Date", "Code")
mergingCols <- names(dt1)[3:4]
我想得到以下data.table:
Date Time ColumnA ColumnB Session
1: 01/01/2013 AB -1 3 PREPOST
2: 02/01/2013 JJ -10 0 PREPOST
对于匹配Cols 相同的行,应从 dt1 中减去 dt2 中的 mergingCols 值,以便获得差值。 mergingCol 太多,无法在代码中单独指定。
这里有类似的问题,但我无法将它们用于减法:
How to apply same function to every specified column in a data.table
Merge data frames whilst summing common columns in R
combine data.tables and sum the shared column
rbind 然后聚合方法或加入方法是否有效?
【问题讨论】:
-
它的核心类似于
dt1[dt2, on=matchingCols, .(ColumnA - i.ColumnA, ColumnB - i.ColumnB), nomatch=0L, by=.EACHI]- 不确定如何自动化最后一点。 -
可能是
paste0(Session, i.Session)?
标签: r merge data.table aggregate