R data.table:将变量转换为id中的常量
假设我有以下R data.table:将变量转换为id中的常量,r,data.table,R,Data.table,假设我有以下数据。表: dat <- data.table("id"=c(1,1,1,1,2,2,2,2), "year"=c(1,1,2,2,1,1,2,2), "var1"=c(4,4,4,4,5,5,5,4), "var2"=c(4,4,4,3,5,5,5,4)) id year var1 var2 1: 1 1 4 4 2: 1 1 4 4 3: 1 2 4 4 4: 1
数据。表:
dat <- data.table("id"=c(1,1,1,1,2,2,2,2), "year"=c(1,1,2,2,1,1,2,2),
"var1"=c(4,4,4,4,5,5,5,4), "var2"=c(4,4,4,3,5,5,5,4))
id year var1 var2
1: 1 1 4 4
2: 1 1 4 4
3: 1 2 4 4
4: 1 2 4 3
5: 2 1 5 5
6: 2 1 5 5
7: 2 2 5 5
8: 2 2 4 4
我想这就是你想要的:
dat[ , `:=`(var1 = var[1L], var2 = var2[1L]), by = .(id, year)]
作为一项功能,您必须执行以下操作:
fn_const <- function(data, id, year, constant){
data[ , (constant) := .SD[1L], by = c(id, year), .SDcols = constant]
data
}
现在只需运行fn_const(id,year,constant)
即可通过引用dat
分配常量,无需复制
TBH首先,我并不认为将其作为一个函数来编写有任何好处,除非您打算反复编写,否则可能会节省空间。“任何大小的向量,取决于我要将多少变量转换为常量”,请使用ellaborate。对于您的主要任务,dat[,`:=`(var1=var1[1],var2=var2[1]),by=(id,year)
在我的情况下,应该做些小动作。我真的有一个更大的数据和更多的变量,我想转换成常量。例如,变量可以是常数=c(“var1”、“var2”、“var10”),而不是像本例中的两个。这就是为什么我想知道如何使你给出的解决方案更具一般性。
fn_const <- function(data, id, year, constant){
data[ , (constant) := .SD[1L], by = c(id, year), .SDcols = constant]
data
}
fn_const<-function(id, year, constant){
dat[ , (constant) := .SD[1L], by = c(id, year), .SDcols = constant]
}