【发布时间】:2018-10-15 18:09:01
【问题描述】:
我目前很难编写一些高效的代码。我有一个变量向量(med.vars),这些变量由年内全球中位数转换。有时全局中位数为 0,这会创建 Inf/-Inf 值,我想将其替换为预转换的变量值 (vars)。我无法弄清楚如何使用某种类型的 data.table 'dat[,:=lapply(.SD), .SDcols=med.vars] 函数或带有 get()、noquotes() 等的 for 循环来有效地做到这一点。
dat<-data.table(v1=c(2,10,7),v2=c(5,6,5),v3=c(10,15,20),v1.med=c(1,Inf,5),v2.med=c(5,6,5),v3.med=c(-Inf,2,3))
vars<-c("v1","v2","v3")
med.vars<-c("v1.med","v2.med","v3.med")
v1 v2 v3 v1.med v2.med v3.med
1: 2 5 10 1 5 -Inf
2: 10 6 15 Inf 6 2
3: 7 5 20 5 5 3
实际上,这些向量是我从 names(dat) 和 grep() 中提取的 50 多个变量,并使用 gsub(".med","",med.vars) 创建第二个预转换变量名称的向量。
我想高效地执行
dat[v1.med==Inf | v1.med==-Inf, v1.med:=v1]
dat[v3.med==Inf | v3.med==-Inf, v3.med:=v3]
对于每个元素 med.vars[i] 及其对应的元素 vars[i] 使得生成的 data.table 为:
v1 v2 v3 v1.med v2.med v3.med
1: 2 5 10 1 5 -10
2: 10 6 15 10 6 2
3: 7 5 20 5 5 3
感谢您的宝贵时间
【问题讨论】:
标签: r data.table