使用带有粘贴命令的 i 对 R 中的数据表中的数据进行子集化

Subsetting data in datatable in R using i with paste command

我有以下具有年度值的数据表 DT1:

        Var1        Var2
NORM_FACTOR_2014    1.026
NORM_FACTOR_2015    0.781

我想根据我在脚本中作为年份参数传递的年份获取 Var2 值。也就是说,如果 Year=2014 我是 运行 那么我显然应该将 Var2 = 1.026 存储在我的变量中。为此,我正在尝试使用粘贴功能,但它不起作用。这是我正在尝试的:

DF <- DT1[Var1 == get(paste0("NORM_FACTOR_",Year)), Var2]

 Error in get(paste0("NORM_FACTOR_", Year)) : 
 object 'NORM_FACTOR_2014' not found

但是当我这样做的时候:

DF <- DT1[Var1 == "NORM_FACTOR_2014",Var2]

DF [1] 1.026

我正在获得价值。我不知道我做错了什么?

解决方案:我得到了这个解决方案,所以它在没有 get 函数的情况下也能工作:

DF <- DT1[Var1 == paste0("NORM_FACTOR_",Batch_Year),Var2]

我不知道我为什么要使用 get()。

谢谢你们抽出时间。

我想你的意思是:

DF <- DT1[DT1$Var1 == paste0("NORM_FACTOR_", Year), "Var2"]

我使用 DT1$Var1 和 "Var2" 而不是 Var1 因为我不假设以前使用过 attach(DT1).

编辑:

选择:

DF <- DT1$Var2[DT1$Var1 == paste0("NORM_FACTOR_", Year)]

并使用正则表达式:

DF <- DT1$Var2[grep(Year, DT1$Var1)]

怎么样

extract<-DT1[substr(Var1,13,16)==Year,Var2]

这基本上就是@Marat Talipov 的建议,更像是

DT1[,yr:=substr(Var1,13,16)]
extract<-DT1[yr==Year,Var2]