【发布时间】:2015-12-07 05:10:40
【问题描述】:
假设我有以下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 2 4 3
5: 2 1 5 5
6: 2 1 5 5
7: 2 2 5 5
8: 2 2 4 4
我希望 var1 和 var2 通过 id 和 year 保持不变,并用 id 和 year 中的第一个观察值替换那些不恒定的值。
我也想用一个函数来做,参数可以是任意大小的向量,具体取决于我想转换为常量的变量数量。
constant <-c("var1", "var2")
id<-"id"
year<-"year"
fn_const<-function(data, id, year, constant){
}
【问题讨论】:
-
“任意大小的向量,取决于我要转换为常量的变量数量”请详细说明。
-
对于您的主要任务,
dat[, `:=`(var1=var1[1], var2=var2[1]), by=.(id,year)]应该可以解决问题 -
在我的情况下,我确实有一个更大的数据,其中包含更多我想转换为常量的变量。因此,例如,变量可以是 constant=c("var1", "var2", .... "var10") 而不仅仅是本例中的两个。这就是为什么我想知道如何使您提供的这个解决方案更通用。
标签: r data.table