我中的R 2個data.tables如下新的列:創建Data.Table使用行操作ř
DT_A
與列sid
,date
,value1
,value2
,其中sid
是主鍵和date
是輔助鍵。
DT_B
有列sid
,date1
,date2
,date3
,...,date12
。這裏sid
是主鍵,因此每行對應於唯一的sid
,其他列名稱對應於DT_A
中的輔助鍵。
欲另一列添加到DT_A
其中第i行包含從表DT_B [sid_i,date_i]
下面是示例代碼和所希望的輸出的相應元素:
require(data.table)
DT_A <- data.table(sid = c(1,2,3,4,5,1,3),
date = c("Jan 2012", "Feb 2012", "April 2012", "May 2012",
"Dec 2012", "Feb 2012", "Oct 2012"),
value1 = rep("1", 7),
value2 = rep("1", 7))
DT_B <- data.table(sid = as.character(c(1,2,3,4,5)),
"Jan 2012" = rep("1", 5),
"Feb 2012" = rep("2", 5),
"March 2012" = rep("3", 5),
"April 2012" = rep("4", 5),
"May 2012" = rep("5", 5),
"June 2012" = rep("6", 5),
"July 2012" = rep("7", 5),
"Aug 2012" = rep("8", 5),
"Sept 2012" = rep("9", 5),
"Oct 2012" = rep("10", 5),
"Nov 2012" = rep("11", 5),
"Dec 2012" = rep("12", 5))
#Set Keys
setkey(DT_A, sid, date)
setkey(DT_B, sid)
#Define Function fun1
fun1 <- function(x){
tryCatch(DT_B[x[1], x[2], with=FALSE], error = function(e) NULL)
}
#Desired Output
DT_A$newCol <- sapply(apply(DT_A, 1, fun1),"[[",1)
DT_A
儘管我目前的方法適用於這個小例子,但我的實際DT_A有2000萬行。這種方法完全掛在那裏。我們可以使用data.table
或其他任何方法以更高效的方式進行此操作嗎?
您沒有提供' DT_A' –
對不起,現在已經做了 – user3750170
我覺得應該重新編寫這個問題。這不是關於做明智的行動,這是關於重塑和合並。 – geneorama